mysql 创建外键约束以及注意事项:
创建外键:
首先创建一张区域表
CREATE TABLE `area` (
`id` int(11) NOT NULL DEFAULT '0' COMMENT 'id',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`delflag` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`code` varchar(8) DEFAULT NULL,
`parent_code` varchar(8) DEFAULT NULL,
`parent_name` varchar(255) DEFAULT NULL COMMENT '父区域名',
`parent_id` int(11) DEFAULT NULL COMMENT '父区域id',
KEY `code` (`code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后创建一张供应商表并创建外键
创建方式一:创建表时增加外键
CREATE TABLE `supplier` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`supplier_name` varchar(50) DEFAULT NULL COMMENT '供应商名称',
`area_code` varchar(8) DEFAULT NULL COMMENT '所属区域',
`supplier_address` varchar(255) DEFAULT NULL COMMENT '供应商地址',
PRIMARY KEY (`id`) USING BTREE,
KEY `supplier_areacode` (`area_code`),
CONSTRAINT `supplier_areacode` FOREIGN KEY (`area_code`) REFERENCES `area` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='供应商表';
创建方式二:已存在表增加外键
//ALTER TABLE 表名 ADD FOREIGN KEY [外键名字] (外键字段) REFERENCES 父表 (主键字段);
ALTER TABLE supplier ADD constraint supplier_areacode FOREIGN KEY supplier_areacode(area_code) REFERENCES area(code) ;
删除外键约束
//ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
ALTER TABLE supplier DROP FOREIGN KEY supplier_areacode;
注意事项:
1.新增外键的表和外键指向表的 表引擎(InnoDB)、字段类型 要相同2.外键指定表的字段需要添加索引
3.在使用方式二的时候需要注意,外键表(supplier表)中的字段值,必须存在于外键指向的表(area表)中。
1和2出错会出现:1215 - Cannot add foreign key constraint 报错
3出错会出现:1452 - Cannot add or update a child row: a foreign key constraint fails… 报错