MySQL 添加外键约束及参数说明
2020-05-14| 程成| 265| 0| MySQL

平时创建都用数据库管理软件,好久没用 SQL 语句了。下面介绍下 SQL 语句。


创建:


CREATE TABLE `user_relate_attr_detail` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `relate_attr_id` int(11) unsigned DEFAULT '0' COMMENT '关联属性ID',
  `attr_val` varchar(500) DEFAULT '' COMMENT '属性值',
  `province_id` int(11) DEFAULT '0' COMMENT '省ID',
  `city_id` int(11) DEFAULT '0' COMMENT '市ID',
  `district_id` int(11) DEFAULT '0' COMMENT '区ID',
  `address` varchar(100) DEFAULT '' COMMENT '具体地址',
  `start_time` int(11) DEFAULT '0' COMMENT '开始时间',
  `end_time` int(11) DEFAULT '0' COMMENT '结束时间',
  PRIMARY KEY (`id`),
  KEY `fk` (`relate_attr_id`),
  CONSTRAINT `fk` FOREIGN KEY (`relate_attr_id`) REFERENCES `user_relate_attr` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



更新:


alter table selection add constraint FK_Reference_1 foreign key(course) references course (id) on delete restrict on update restrict;



InnoDB中外键约束定义的语法如下:


ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]




CASCADE

在父表上update/delete记录时,同步update/delete掉子表的匹配记录 


SET NULL

在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)  


NO ACTION

如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作  


RESTRICT

同no action, 都是立即检查外键约束


SET NULL

父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别


NULL、RESTRICT、NO ACTION

删除:从表记录不存在时,主表才可以删除。删除从表,主表不变

更新:从表记录不存在时,主表才可以更新。更新从表,主表不变

 

CASCADE

删除:删除主表时自动删除从表。删除从表,主表不变

更新:更新主表时自动更新从表。更新从表,主表不变

 

SET NULL

删除:删除主表时自动更新从表值为NULL。删除从表,主表不变

更新:更新主表时自动更新从表值为NULL。更新从表,主表不变


×
作者:程成
QQ:492245711