数据库外键
在MySQL中,我们对主键比较了解,知道主键的主要作用是唯一区分表中的各个行,但是外键(foreign key)是什么呢?
1 外键
1.1 外键的定义
外键是表中的某一列,它包含在另一个表的主键中。
外键也是索引的一种,是通过一张表中的一列指向另一张表中的主键,来对两张表进行关联。
1.2 外键的作用
外键的主要作用是保证数据的一致性和完整性,减少数据的冗余,主要体现在以下两个方面
阻止执行
- 从表插入新行,其外键不是主表中的主键值便阻止插入;
- 从表修改外键值,新值不是主表的主键值便阻止修改;
- 主表删除行,其主键值在从表里存在则阻止删除;
- 主表修改主键值,旧值在从表中存在便阻止修改。
级联执行
- 主表删除行,连带从表的相关行一起删除;
- 主表修改主键值,连带从表相关行一起修改
1.3 外键创建限制
- 父表必须已经存在于数据库中;
- 必须为父表定义主键;
- 外键中列的数目必须与父表的主键中列的数目相同;
- 两个表必须是InnoDB表,MyISAM暂时不支持外键
2 创建外键
-
创建外键的语法
ALTER TABLE表 ADD CONSTRAINT外键名 FOREIGN KEY(外键字段名) REFERENCES 主表表名(主键字段名) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
其中 ON DELETE 和 ON UPDATE 表示事件触发限制.
参数 意义 RESTRICT 限制主表中的外键改动,默认值 CASCADE 跟随外键改动 SET NULL 设为null值 NO ACTION 无动作 SET DEFAULT 设为默认值 alter table `doc`add constraint doc_idforeign key (id)references document(id)on delete cascade;
-
创建后,可以查看当前表结构
show create table 表名
-
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;