数据类型匹配时MySQL外键报3780约束不兼容错误如何解决?
错误原因
外键约束要求关联的两个字段数据类型、属性完全一致,本次报错的核心差异为:
- 主表cars的
carid字段定义为INT UNSIGNED(无符号整数,不支持负数存储) - 从表mechanic的
carid字段定义为普通有符号INT
两者属性不匹配,因此触发3780错误。
额外说明:SQL中INT(100)里的数字是旧版MySQL的显示宽度参数,不影响字段实际存储长度,MySQL 8.0及以上版本已经废弃该语法,实际开发中可以省略。
修复方案
将mechanic表的carid字段也设置为INT UNSIGNED,和主表字段属性完全对齐即可,修改后的完整建表语句如下:
CREATE TABLE cars( carid INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, -- 注意:VIN码包含字母,不要用INT类型存储,会丢失数据,建议改为VARCHAR VIN VARCHAR(255) NOT NULL, Make VARCHAR (100) NOT NULL, Year Year(4) NOT NULL, Color VARCHAR(10) ); CREATE TABLE mechanic( mechanicid INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(50) NOT NULL, lastname VARCHAR(50) NOT NULL, title VARCHAR(50) NOT NULL, carid INT UNSIGNED NULL, -- 原需求中mechanics表包含currentcar字段,之前的建表语句遗漏,按需补充 currentcar VARCHAR(100) NULL, FOREIGN KEY(carid) REFERENCES cars(carid) );
内容的提问来源于stack exchange,提问作者Robotboy
相关产品推荐
相关产品推荐

