MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。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]
添加foreignKey:
ALTER TABLE `user_resource` CONSTRAINT `FKEEAF1E02D82D57F9` FOREIGN KEY (`user_Id`) REFERENCES `user` (`Id`)
向上面这样没有显式指定reference_option,默认就是 NO ACTION
也可以像下面这样显式指定reference_option:
ALTER TABLE user_resource ADD CONSTRAINT FK_8A4A6B07591CC992 FOREIGN KEY (course_id) REFERENCES user (id) ON DELETE CASCADE
下面是几个reference_option的区别:
CASCADE
在父表上update/delete记录时,同步update/delete掉子表的匹配记录 (硬删除用的比较多)
SET NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)
NO ACTION
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
RESTRICT
同no action, 都是立即检查外键约束
mysql忽略外键约束:
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE user_articles;
SET FOREIGN_KEY_CHECKS = 1;
