数据库外键练习
①一对多关系练习
要求:
部门表:有部门编号、部门名称、以及部门介绍
员工表:有员工编号、员工姓名、员工薪资以及员工对应部门的编号
# 部门表
create table 部门表(
id int primary key auto_increment,
部门 varchar(32),
部门信息 varchar(64)
);
# 员工表
create table 员工表(
id int primary key auto_increment, # 主键
员工姓名 varchar(32),
薪资 int,
部门编号 int,
foreign key(部门编号) references 部门表(id)
);
信息录入
# 部门表信息录入
insert into 部门表(部门,部门信息) values('销售部','产品推销');
insert into 部门表(部门,部门信息) values('技术部','技术开发');
insert into 部门表(部门,部门信息) values('管理部','行政管理');
select * from 部门表;
+----+----------+-------------+
| id | 部门 | 部门信息 |
+----+----------+-------------+
| 1 | 销售部 | 产品推销 |
| 2 | 技术部 | 技术开发 |
| 3 | 管理部 | 行政管理 |
+----+----------+-------------+
# 员工表信息录入
insert into 员工表(员工姓名,薪资,部门编号) values('吴煌',8000,1);
insert into 员工表(员工姓名,薪资,部门编号) values('柯圣风',7500,1);
insert into 员工表(员工姓名,薪资,部门编号) values('陈源',13000,2);
insert into 员工表(员工姓名,薪资,部门编号) values('龙康志',15000,3);
select * from 员工表;
+----+------------+--------+------------+
| id | 员工姓名 | 薪资 | 部门编号 |
+----+-------------+--------+-----------+
| 1 | 吴煌 | 8000 | 1 |
| 2 | 柯圣风 | 7500 | 1 |
| 3 | 陈源 | 13000 | 2 |
| 4 | 龙康志 | 15000 | 3 |
+----+--------------+-------+-----------+
②多对多关系练习
要求:
图书表:有书籍编号、书名、以及价格
作者表:有作者编号、作者名字、以及性别
关系表:
# 书籍表
create table 书籍表(
id int primary key auto_increment,
书名 varchar(32),
价格 float(8,2)
);
# 作者表
create table 作者表(
id int primary key auto_increment,
作者 varchar(32),
性别 varchar(4)
);
# 关系表
create table 书籍关系表(
id int primary key auto_increment,
作者id int,
foreign key(作者id) references 作者表(id)
on update cascade
on delete cascade,
书籍id int,
foreign key(书籍id) references 书籍表(id)
on update cascade # 级联更新
on delete cascade # 级联删除
);
信息录入
# 书籍表信息录入
insert into 书籍表(书名,价格) values('Python开发',298);
insert into 书籍表(书名,价格) values('Go语言入门',88.88);
insert into 书籍表(书名,价格) values('程序员的自我修养',178);
insert into 书籍表(书名,价格) values('头发的养护秘籍',666.66);
select * from 书籍表;
+----+----------------------+--------+
| id | 书名 | 价格 |
+----+----------------------+--------+
| 1 | Python开发 | 298.00 |
| 2 | Go语言入门 | 88.88 |
| 3 | 程序员的自我修养 | 178.00 |
| 4 | 头发的养护秘籍 | 666.66 |
+----+-----------------------+--------+
# 作者表信息录入
insert into 作者表(作者,性别) values('潘森','男');
insert into 作者表(作者,性别) values('古哥','男');
insert into 作者表(作者,性别) values('静静','女');
select * from 作者表;
+----+--------+-------+
| id | 作者 | 性别 |
+----+--------+-------+
| 1 | 潘森 | 男 |
| 2 | 古哥 | 男 |
| 3 | 静静 | 女 |
+----+--------+-------+
# 关系表信息录入
insert into 书籍关系表(作者id,书籍id) values(1,1);
insert into 书籍关系表(作者id,书籍id) values(2,2);
insert into 书籍关系表(作者id,书籍id) values(3,3),(3,4);
select * from 书籍关系表;
+----+----------+----------+
| id | 作者id | 书籍id |
+----+----------+----------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
| 4 | 3 | 4 |
+----+----------+----------+
③一对一关系练习
要求:
用户表:有用户编号、用户名、用户年龄、关联用户详情的编号
用户详情表:有用户详情编号、用户地址、手机号
# 用户详情表
create table 用户详情表(
id int primary key auto_increment,
地址 varchar(32),
手机号 bigint
);
# 用户表
create table 用户表(
id int primary key auto_increment,
用户名 varchar(32),
年龄 int,
详细id int unique,
foreign key(详细id) references 用户详情表(id)
on update cascade
on delete cascade
);
信息录入
# 用户详情表信息录入
insert into 用户详情表(地址,手机号) values('中国上海',13288884444),('中国北京',17012345678);
select * from 用户详情表;
+----+-------------+-------------+
| id | 地址 | 手机号 |
+----+-------------+-------------+
| 1 | 中国上海 | 13288884444 |
| 2 | 中国北京 | 17012345678 |
+----+-------------+-------------+
# 用户表信息录入
insert into 用户表(用户名,年龄,详细id) values('Poco',18,1),('黑影',20,2);
select * from 用户表;
+----+-----------+--------+----------+
| id | 用户名 | 年龄 | 详细id |
+----+-----------+--------+----------+
| 1 | Poco | 18 | 1 |
| 2 | 黑影 | 20 | 2 |
+----+-----------+--------+----------+

浙公网安备 33010602011771号