如何解决错误代码:3780在外键约束“ cal_ibfk_1”中引用列“ deal_id”和引用列“ d_id”不兼容
CREATE TABLE eng(
d_id INT,min_call_time DATETIME DEFAULT NULL,max_call_time DATETIME DEFAULT NULL,call INT DEFAULT 0,min_meeting_time DATETIME DEFAULT NULL,max_meeting_time DATETIME DEFAULT NULL,cmeeting INT DEFAULT 0,activities INT DEFAULT 0,PRIMARY KEY (d_id)
);
CREATE TABLE cal(
id INT,d_id INT,c_meetings INT,c_active INT,c_cancelled INT,min_start_time DATETIME,max_start_time DATETIME,PRIMARY KEY (id),FOREIGN KEY (d_id) REFERENCES eng(d_id)
);
错误:
错误代码:3780。在外键约束'cal_ibfk_1'中引用列'deal_id'和引用列'd_id'不兼容。
我正在使用MysqL 8.0
代码可以很好地解决数据库问题:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=4b0d9723ae09dcebc677d2f014161222
不适用于MysqL。
此(Error number: 3780 Referencing column '%s' and referenced column '%s' in foreign key constraint '%s' are incompatible)与我的不同。数据类型与我的相同。
非常感谢您能提供的任何帮助。
解决方法
我认为这里的问题是d_id
表中的cal
列未声明为NOT NULL
。这意味着该表中的d_id
值可能为NULL
,因此无法在父d_id
表中被引用回eng
。要解决此问题,请考虑对cal
表定义进行以下细微更改:
CREATE TABLE cal(
id INT,d_id INT NOT NULL,-- change is here
c_meetings INT,c_active INT,c_cancelled INT,min_start_time DATETIME,max_start_time DATETIME,PRIMARY KEY (id),FOREIGN KEY (d_id) REFERENCES eng(d_id)
);
请注意,即使没有隐式定义,MySQL中的主键列也隐式声明为NOT NULL
。因此,您的eng
表实际上定义为:
CREATE TABLE eng(
d_id INT NOT NULL,...,PRIMARY KEY (d_id)
);
在子NULL
表中d_id
可能具有cal
值的问题是,NULL
在逻辑上表示“未知”,因此该值不可能重新连接到d_id
表中的eng
主键。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。