`

mysql的各种外键约束

阅读更多

外键约束对子表的含义:
如果在父表中找不到候选键,则不允许在子表上进行insert/update

外键约束对父表的含义:
在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句, InnoDB支持5种方式, 分列如下

. cascade方式
   在父表上update/delete记录时,同步update/delete掉子表的匹配记录
   On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用

. set null方式
   在父表上update/delete记录时,将子表上匹配记录的列设为null
   要注意子表的外键列不能为not null
   On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用

. No action方式
   如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
   这个是ANSI SQL-92标准,从mysql4.0.8开始支持

. Restrict方式
   同no action, 都是立即检查外键约束

. Set default方式
   解析器认识这个action,但Innodb不能识别,不知道是什么意思...

注意:trigger不会受外键cascade行为的影响,即不会解发trigger

在mysql中,与SQL标准相违背的三点
1.       如果在父表中有多个key值相同,那么在进行外键check时,会当成有相同key值的其他行不存在; 比如当定义了一个restrict行为外键时,一个子表行对应到多个父表行(具有相同key值), Innodb不允许删除父表上的所有这些行

2.       父子表是同一个表,自我参照时不允许指定on update cascade, on update set null
从mysql4.0.13开始,允许同一个表上的on delete set null
从mysql4.0.21开始,允许同一个表上的on delete cascade
但级联层次不能超出15

3, Innodb在检查unique,constraint约束时,是row by row而不是语句或事务结束;
SQL标准中对constraint的检查是在语句执行完成时

 

注:在使用Import 等工具导入表数据时,碰到constraint时,可以用SET foreign_key_checks = 0; 取消约束,具体见 手册:http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

分享到:
评论

相关推荐

    mysql数据库触发器,外键约束模式知识点

    内包含外键约束模式,数据库的视图基本操作

    MySQL外键约束常见操作方法示例【查看、添加、修改、删除】

    主要介绍了MySQL外键约束常见操作方法,结合实例形式分析了mysql针对外键约束的查看、添加、修改、删除等相关操作实现方法,需要的朋友可以参考下

    MySQL的约束-外键约束

    MySQL的约束——外键约束。 一篇文章带你快速了解!

    详解MySQL 外键约束

    MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 2.外键的使用条件 两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持) 外键列必须建立了索引,MySQL ...

    详解MySQL中的外键约束问题

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建、检索、更新和删除等操作都...MySQL外键约束条件  MySQL的外键约束条件有以下几种:  · CASCADE : 从父表删除或更新行时自动删除

    MySQL删除表的时候忽略外键约束的简单实现

    删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库...

    总结三种MySQL外键约束方式

     这里以MySQL为例,总结一下3种外键约束方式的区别和联系。  这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。  首先创建用户组表:  create table t_group(  id int ...

    MySQL删除有外键约束的表数据方法介绍

    在MySQL中删除一张表或一条数据的时候,...禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0; 然后再删除数据 启动外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=1; 查看当前FOREIGN_KEY_CHECKS的值,可用

    MySQL外键约束的实例讲解

    MySQL的外键约束是用来在两个表之间建立链接的,其中一个表发生变化,另外一个表也发生变化。从这个特点来看,它主要是为了保证表数据的一致性和完整性的。 对于两个通过外键关联的表,相关联字段中主键所在的表是主...

    MySQL外键使用及说明详解

    MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);  2.外键列必须建立了索引,...

    mysql处理添加外键时提示error 150 问题的解决方法

    很多朋友们在做表设计时,处理添加外键时提示error 150 问题,都会遇到此文档中详细的记载了解决方案,希望可以帮到你!

    外键约束(FOREIGN KEY)

    外键约束(FOREIGN KEY)

    MySQL 关闭子表的外键约束检察方法

    下面小编就为大家带来一篇MySQL 关闭子表的外键约束检察方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    MySql建表语句的外键约束分离工具(FOREIGN KEY)

    在MySql数据库建表时,如果CREATE TABLE语句中添加了FOREIGN KEY,那么所依赖的表必须先被创建,痛苦不堪,使用我这个工具可以将外键约束的语句分离出来,单独执行。 具体说明可以参考帖子 ...

    MySQL外键约束的禁用与启用命令

    下面小编就为大家带来一篇MySQL外键约束的禁用与启用命令。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    MySQL外键创建失败1005原因汇总

    1、安装mysql有InnoDB的...5、MySQL支持外键约束,并提供与其它DB相同的功能,但表类型必须为 InnoDB,非InnoDB 存储引擎会导致报错。 6、建外键的表的那个列没有index。 您可能感兴趣的文章:mysql外键(Foreign Key)

Global site tag (gtag.js) - Google Analytics