Mysql之foreign key(外键)
1.建立表关系:先建立被关联的表,并且保证被关联的字段唯一
# 这个是被关联的表:
create table dep(
id int primary key,
name char(16),
comment char(50)
)
# 这个是主表:
create table emp(
id int primary key,
name char(10),
sex enum('male','female'),
dep_id int,
foreign key(dep_id) references dep(id)
)
往表格插入内容的顺序:先往被关联表插入记录,再往关联表插入记录。
# 这是被关联表的数据内容
insert into dep values(1,'IT','技术能力有限部门'),(2,'销售','销售能力不足部门'),(3,'财务','花钱特别多部门');
#这是主表数据内容
insert into emp values(1,'egon','male',1),(2,'alex','male',1),(3,'wxx','female',3),(4,'jinximn','male',2);
我们可以先插入主表数据内容试试(也就是第二句insert):运行——报错
好了我们还是按顺序来,运行后表内被插入内容:
删除表内数据数据:
错误的删除方式:
delete from dep where id=3
这样代码运行结果为:
正确删除方式:
delete from emp where dep_id = 1; #先删除主表关联的内容
delete from dep where id=1; # 再删除被关联表的id内容
运行后,我们可以来看看表的内容:
当然也有可以不这么麻烦的方式,那就是在建表时候,就对其进行设置,让delete和update进行同步:
create table emp(
id int primary key,
name char(10),
sex enum('male','female'),
dep_id int,
foreign key(dep_id) references dep(id)
on delete cascade
on update cascade
)
on delete cascade和on update cascade保证了删除和更新的同步。
在最开始建表时候这样设置,那么刚刚所说错误的方式现在是正确的
更新数据(这个是建立在设置了on update cascade的基础上的哈,不然运行会报错):
update dep set id = 222 where id=2