MySQL外键约束
2015-08-16 16:45
501 查看
InnoDB类型表有一个其他存储引擎不支持的特性——外键约束。
当B表的外键关联到A表的主键时(表B是父表A表的子表),如果删除了A表,那么B中的外键则仍然关联着一个不存在的表的主键。而外键约束则设定了当约束被破坏时应该应用的的规则,包括防止约束破坏。
创建一个外键约束的语法是:
FOREIGN KEY(item_name)REFERENCES table (column)
table(column)子句是约束该外键的父表列的引用,该语句只是标识了关系,并没有说明约束被破坏时如何操作。
语句后面附上内容来决定触发什么动作:
ON DELETE action
ON UPDATE action
其中action总共有5个动作可选
(1)RESTRICT:不指定任何动作
(2)NO ACTION:不指定任何动作
(3)SET DEFAULT:
(4)CASCADE:最有用的选项。删除父记录将导致那个以父ID作为外键的子记录也被删除
(5)SET NULL:删除父记录将导致子表中相应的外键被设置为NULL,如果该表的列定义为NOT NULL(大部分情况是这样),删除父记录将引发一个错误
注意
由于只有InnoDB表类型的表支持外键约束,所以相关联的两个表都必须是InnoDB类型。
此外,为了MySQL能够比较外键和主键的值,相关的列必须是相同类型的。比如:数字列的大小必须相同;文本列的字符集和校对规则必须相同。
当B表的外键关联到A表的主键时(表B是父表A表的子表),如果删除了A表,那么B中的外键则仍然关联着一个不存在的表的主键。而外键约束则设定了当约束被破坏时应该应用的的规则,包括防止约束破坏。
创建一个外键约束的语法是:
FOREIGN KEY(item_name)REFERENCES table (column)
table(column)子句是约束该外键的父表列的引用,该语句只是标识了关系,并没有说明约束被破坏时如何操作。
语句后面附上内容来决定触发什么动作:
ON DELETE action
ON UPDATE action
其中action总共有5个动作可选
(1)RESTRICT:不指定任何动作
(2)NO ACTION:不指定任何动作
(3)SET DEFAULT:
(4)CASCADE:最有用的选项。删除父记录将导致那个以父ID作为外键的子记录也被删除
(5)SET NULL:删除父记录将导致子表中相应的外键被设置为NULL,如果该表的列定义为NOT NULL(大部分情况是这样),删除父记录将引发一个错误
注意
由于只有InnoDB表类型的表支持外键约束,所以相关联的两个表都必须是InnoDB类型。
此外,为了MySQL能够比较外键和主键的值,相关的列必须是相同类型的。比如:数字列的大小必须相同;文本列的字符集和校对规则必须相同。
相关文章推荐
- mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
- mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
- mysql内置函数汇总
- 彻底删除mysql的方法(有隐藏文件)
- mysql锁研究系列一(锁的基本概念)
- mysql安装版和解压版安装过程遇到1067的问题,和数据库乱码问题 解决办法
- MySQl表检查及修复
- Solr 5.2.1 与mysql 整合
- mysql 查看当前登陆用户匹配原则及权限user()与current_user()
- 1.1-Mysql安装
- Windows平台下MySQL常用操作与命令
- MySql折腾小记二:text/blog类型不允许设置默认值,不允许存在两个CURRENT_TIMESTAMP
- mysql存储过程 例子 游标cursor 循环嵌套 事物
- MySql错误处理-错误处理的例子
- MySQL插入语句insert性能优化
- powerdesigner物理视图 导出建库脚本(mysql)
- MySQL 5.6 二进制包安装配置多实例方法
- mysql常见的日期转换格式
- MySQL中授权(grant)和撤销授权(revoke)
- 如何修改mysql5.6.24解压缩版(免安装版或zip版)字符编码