原文网址:数据库--外键--用法/缺点_IT利刃出鞘的博客-CSDN博客
简介
本文介绍数据库的外键的用法以及其缺点。
实际上,项目中很少用到外键,因为缺点很明显,《阿里巴巴 Java 开发手册》也明确写明不要使用物理外键。
创建外键的条件
- 父表和子表引擎一致,否则报错;
- 保证表的存储引擎为InnoDB,否则虽然不报错但是无约束(只有index);
- 实际上,如果两个表都是MyISAM 引擎的,错误根本不会发生,但也不会产生外键。
- 两个字段数据类型一致,数据显示长度可以不同,另外需注意有符号无符号,必须一致;
- 两个字段都添加了独立索引,如果子表外键字段无索引,那么在创建外键的时候会自动先添加索引;如果父表字段无索引,将报错;
- 字段是否允许为空,在更新或删除时候对外键字段操作有关;如外键创建时候 on delete set null on udpate cascade。但是子表外键字段不允许为空, 矛盾,创建不成功。
- 字段的字符集和校对集(外键类型为字符的时候);
- 外键名字不能重复,是针对数据库而不是表;
- 子表外键字段 - 数据 为父表引用字段子集;
- 字段可能为混合键值中一个,没有自己独立索引。外键字段必须有自己独立索引。
外键的作用
外键默认的作用有两点:一个对父表,一个对子表(外键字段所在的表)。
上边只是部分内容,为便于维护,本文已迁移到此地址:数据库-外键-用法/缺点 - 自学精灵