外键 foreign key
# 外键 foreign key
表和表之间一旦有了关联之后,就变得麻烦了。
# 作用
在表和表之间建立联系。
# 要点
- 本表中的外键参照其他表中的主键
- 外键的数据类型应该与所参照主键相同
- 外键可能是可以重复的,此时它的Key为
MUI
- 外键字段的值不应该是其他表主键字段没有的
- 当其他表中主键字段的某个值被删掉、更新就会产生问题(涉及外键的三种操作)
- 要销毁两张表时,应先销毁外键所在的表
- 有并发操作的项目中一般都是禁止使用外键的(企业规范)
- 删除外键需要使用外键别名
提示
MUI
表示该字段的值是可重复的。
# 外键的添加、查看、删除
# 添加外键
创建表时添加外键(第二张表)
- 第一张表
create table test_1( stu_id int(4) primary key, # test_1表的主键 name varchar(30) );
1
2
3
4- 第二张表
create table test_2( id int primary key, money decimal(10,4), stu_id int(4), foreign key(stu_id) references test_1(stu_id); # 设置外键
1
2
3
4
5其中
foreign key(<FieldName1>) references <TableName>(<FieldName2>);
1解释:
foreign key
:我要设置一个外键<FieldName1>
:这个外键在本表中叫啥名references
:它来自哪儿<TableName>(<FieldName2>)
:它来自<TableName>
表中的<FieldName2>
字段
后期添加外键
alter table <TableName> add foreign key(<FieldName1>) references <TableName>(<FieldName2>);
1解释同上。
提示
还是那句话,后期改变结构的情况是少之又少的。数据库都是设计好了再用SQL语句来实现的,哪像初学者设计数据库一上来就是SQL语句一顿操作猛如虎啊。
# 查看外键
通过 show create table <TableName>;
来查看外键。
提示
外键创建后,并不会在表结构中明示出来。
外键别名
每创建一个外键,都会自动生成一个别名。
CONSTRAINT `eatery_ibfk_1` FOREIGN KEY(`stu_id`) REFERENCES `test_1` (`stu_id`);
1
eatery_ibfk_1
为外键 stu_id
的别名,一些操作要依赖于它,比如删除外键。
别名相关的内容,详见 MySQL别名 (opens new window)
# 删除外键
alter table <TableName> drop foreign key <外键别名>;
1
如要删除 test_2
这个表中的外键 stu_id
,使用其别名 eatery_ibfk_1
:
alter table test_2 drop foreign key eatery_ibfk_1;
1
注意
要删除外键必须使用外键别名,别名可通过show create table <FieldName>
来查看。
编辑 (opens new window)
上次更新: 2022/09/26, 16:55:15