一.外键:
foreign key 注意:
1.被关联的字段必须是一个key,通常是id字段
2.创建表时:必须先建立被关联的表,才能建立关联表
外键:
constraint 外键名字 (可以不写,不写系统会自动分配)。
foreign key (当前表需要关联的id,直接写自己设置的id)
references 被关联的表名(被关联表的id)
3.插入记录时:必须先往被关联的表插入记录,才能往关联表中插入记录
删除时:应该先删除关联表中的记录,再删除被关联对应的记录
4.更新和删除同步:on update cascade on delete cascade
5.必须先删除关联的表 才能删被关联的表
二.下面举例说明:
多对一
1.先创建被关联表:
create table dep(
id int primary key auto_increment,
dep_name varchar(20),
dep_info varchar(20)
);
2.创建关联表:
create table emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
constraint fk_emp_dep
foreign key(dep_id) references dep(id)
on update cascade on delete cascade);
3.插入被关联表的内容:
insert into dep(dep_name,dep_info)values
('python','python_course'),
('music','music_course'),
('java','java_course');
4.插入关联表内容:
insert into emp(name,age,dep_id) values
('dahai',18,1),
('xishi',19,2),
('zhuge',23,3),
('xialuo',24,1),
('zhouyu',21,3);
5.查询:
select * from emp,dep where emp.dep_id=dep.id;
+----+--------+------+--------+----+----------+---------------+
| id | name | age | dep_id | id | dep_name | dep_info |
+----+--------+------+--------+----+----------+---------------+
| 1 | dahai | 18 | 1 | 1 | python | python_course |
| 4 | xialuo | 24 | 1 | 1 | python | python_course |
| 2 | xishi | 19 | 2 | 2 | music | music_course |
| 3 | zuge | 23 | 3 | 3 | java | java_course |
| 5 | zhouyu | 21 | 3 | 3 | java | java_course |
+----+--------+------+--------+----+----------+---------------+
2.多对多
关系:
author 多对多 book
author2book 多对一 author
author2book 多对一 book
解决办法:
1.先创建两个被关联表
create table author(
id int primary key auto_increment,
name varchar(16),
age int
);
create table book(
id int primary key auto_increment,
bname varchar(20),
price int
);
2.创建关联表并删改同步:
create table author2book(
id int primary key auto_increment,
author_id int,
bool_id int,
unique key(author_id,book_id),
foreign key(author_id) references author(id)
on update cascade on delete cascade,
foreign key(book_id) references book(id)
on update cascade on delete cascade
);
3.插入被关联表数据
insert into author(name,age)values
('dahai',22),
('xialuo',23),
('guan',18),
('xishi',19),
('jiujiu',20);
insert into book(bname,price)values
('玉女真经',5),
('九阳神功',3),
('太极拳',4),
('如来神掌',2),
('玉女剑法',6);
4.插入关联表数据
insert into author2book(author_id,book_id) values
(1,1),
(1,2),
(1,3),
(2,3),
(2,4),
(3,2),
(3,3),
(3,4),
(4,3),
(5,2);
5.查询:
select * from author,book,author2book where author.id=author2book.author_id and book.id=author2book.book_id;
结果这里就不展示了
3.一对一(主键id当外键)
1.创建表
create table student(
id int primary key,
name varchar(10)
);
create table stu_detail(
s_id int primary key,
age int,
sex enum('man','woman') not null,
foreign key(s_id) references student(id)
on update cascade
on delete cascade
);
插入数据
insert into student values
(1,'dahai'),
(2,'xialuo'),
(3,'xishi');
insert into stu_detail values
(1,18,'man'),
(2,18,'man'),
(3,18,'woman');
select * from student,stu_detail where student.id = stu_detail.s_id;
+----+--------+------+------+-------+
| id | name | s_id | age | sex |
+----+--------+------+------+-------+
| 1 | dahai | 1 | 18 | man |
| 2 | xialuo | 2 | 18 | man |
| 3 | xishi | 3 | 18 | woman |
+----+--------+------+------+-------+