语法:
foregin key(当前表字段) references 父表(父表字段) [ON DELETE reference_option] [ON UPDATE reference_option]
reference_option 选项:
CASCADE: 从父表中删除或者更新对应的行,当前子表同时删除或者更新对应的行
SET NULL: 从父表中删除或者更新对应行,当前子表同时将外键列设置为NULL,如果子表外键字段设置了NOT NULL,还需要设置DEFAULT,否则会出错
NO ACTION: InnoDB拒绝删除或者更新父表,对父表的外键字段拒绝操作,这意味着删除父表中的行也会失败
RESTRICT: 拒绝删除或者更新父表
SET DEFAULT: InnoDB目前不支持。
外键约束常用的两种选项
- 父表更新同时更新子表,父表删除的时候如果子表不存在对应的数据删除成功,如果存在对应数据,删除失败.
ON UPDATE CASCADE ON DELETE RESTRICT;
- 父表更新同时更新子表,父表删除子表的数据也删除.
ON UPDATE CASCADE ON DELETE CASCADE
没有创建mysql表的时候创建外键约束
首先创建主表Class
create table Class(
id int auto_increment primary key,
name varchar(6)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
再创建字表students
create table students(
id int auto_increment primary key,
name varchar(6),
class_id int,
foreign key(class_id) references Class(id) ON UPDATE CASCADE ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
这样就添加了外键约束,每个同学都会引用一个班级.要注意删除的时候需要先删除拥有外键约束的子表
已创建表添加外键约束
alter table 子表的数据表名 add foreign key(子表的外键名称) references 父表的数据表名称(父表的主键名称);
alter table students add foreign key(class_id) reference Class(id) ON UPDATE CASCADE ON DELETE CASCADE
网友评论