kejiayuan0806

2018-10-24   阅读量: 632

数据分析师 Mysql

MySQL外键约束

扫码加入数据分析学习群

主键:是唯一标识一条记录,不能有重复不允许为空,用来保证数据完整性。

外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。外键主要用来保证数据的完整性和一致性,所以说,外键一定是在从表中创建,从而找到与主表之间的联系;从表负责维护二者之间的关系。

一、外键的使用

外键的使用需要满足以下条件:

1、两张表必须都是InnoDB存储引擎(MyISAM不支持外键),并且它们没有临时表。

2、建立外键关系的对应列必须具有相似的数据类型,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以。

3、建立外键关系的对应列必须建立了索引。

4、假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯一的。假如没有显式的给出,InnoDB会自动的创建。

二、添加外键的语法

添加外键有两种方式:一种是创建表的时候添加,另一种是对已创建的表,修改表结构来添加。

创建表时添加外键的语法:

[CONSTRAINT symbol] FOREIGN KEY [id] (从表的字段1)

REFERENCES 主表的表名 (主表的字段2)

[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

CONSTRAINT symbol:可以给这个外键约束起一个名字,有了名字,以后找到它就很方便了。如果不加此参数的话,系统会自动分配一个名字。

FOREIGN KEY:将从表中的字段1作为外键的字段。

REFERENCES:映射到主表的字段2。

ON DELETE后面的四个参数:代表的是当删除主表的记录时,所做的约定。

RESTRICT(限制):若主表有对应从表的记录,此主表将无法删除。

CASCADE(级联):若主表的记录删掉,则从表中相关联的记录都将被删掉。

SET NULL:从主表中删除或更新对应的行,同时将从表中的外键列设为空。

NO ACTION:InnoDB拒绝删除或者更新主表。

修改表结构添加外键的语法:

ALTER TABLE 从表的表名 ADD FOREIGN KEY(从表的字段1) REFERENCES 主表的表名(主表的字段2);

ALTER TABLE从表的表名:在从表中进行操作。

ADD FOREIGN KEY(从表的字段1):将从表的字段添加为外键。

REFERENCES 主表的表名(主表的字段2):映射到主表当中为的字段。

外键约束使用最多的两种情况:

主表更新时从表也更新,主表删除时如果从表有匹配的项,删除失败;

ON UPDATE CASCADE ON DELETE RESTRICT;

主表更新时从表也更新,主表删除时从表匹配的项也删除。

ON UPDATE CASCADE ON DELETE CASCADE;

三、删除外键

获取外键名的语法:

SHOW CREATE TABLE 从表的表名;

删除外键语法:

ALTER TABLE 从表的表名 DROP FOREIGN KEY 外键名;

0.0000 0 4 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子