MySQL创建带外键的表时出现errno: 150错误解决方案
在MySQL创建表的过程中,可能会用到外键约束,它可以为两个表之间建立关联,而这种关联关系必须要通过主键和外键进行连接。然而在创建带有外键的表的过程中,有时会出现errno: 150错误,本文将为大家介绍多种解决方案。
阅读更多:MySQL 教程
错误信息示例
在创建带有外键的表的时候,可能会遇到以下错误提示:
ERROR 1005 (HY000): Can’t create table ‘database_name.table_name’ (errno: 150)
常见解决方案
1.数据类型不匹配
外键与参考主键必须使用相同的数据类型、长度及unsigned属性,否则会出现上述错误。例如:
CREATE TABLE t1 (id TINYINT UNSIGNED NOT NULL PRIMARY KEY);
CREATE TABLE t2 (id TINYINT NOT NULL,FOREIGN KEY (id) REFERENCES t1(id));
2.表定义顺序不正确
在创建带有外键的表时,必须先创建参考表,再创建引入表。因为在创建引入表的时候,它需要找到参考表的对应主键。例如:
CREATE TABLE country (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(50) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE city(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
country_id INT UNSIGNED NOT NULL,
name CHAR(50) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (country_id) REFERENCES country(id)
);
3.命名不匹配
外键约束的名称要具有唯一性,需要在整个数据表中命名不同。例如:
CREATE TABLE t1 (id INT UNSIGNED NOT NULL PRIMARY KEY);
CREATE TABLE t2 (id INT UNSIGNED NOT NULL,PRIMARY KEY(id),FOREIGN KEY (id) REFERENCES t1(id) ON DELETE SET NULL);
4.外键约束存在重复
如果在引入表中给定了两个同名的外键约束,则会出现此错误。需要注意避免在创建表时出现同名的外键约束。例如:
CREATE TABLE t1 (id INT UNSIGNED NOT NULL PRIMARY KEY);
CREATE TABLE t2 (id INT UNSIGNED NOT NULL,name CHAR(20),PRIMARY KEY (id),FOREIGN KEY (id) REFERENCES t1(id),CONSTRAINT fk_name FOREIGN KEY (id) REFERENCES t1(id));
总结
MySQL创建带外键的表时,出现errno: 150错误通常是由于表定义不匹配、表定义顺序不正确、命名不匹配或外键约束存在重复造成的。在实际应用中,我们需要注意这些问题,以避免约束引起的问题,提高数据表的存储效率及其稳定性。
极客教程