gpt4 book ai didi

mysql - 无法设置外键mysql

转载 作者:行者123 更新时间:2023-11-28 23:21:36 24 4
gpt4 key购买 nike

我正在开发一个补丁版本,它是通过使用原始 sql 创建或更新现有表。当我像下面这样运行这 3 个查询时

第一次查询成功

CREATE TABLE ts_overtime_scheme_histories( id int AUTO_INCREMENT NOT NULL, 
name VARCHAR(255),
workdays INT,
break_payable VARCHAR(25),
roundable VARCHAR(25),
round_rule VARCHAR(10), round_minute INT,
type enum('ratio','fixed') DEFAULT 'ratio',
overtime_request_id INT UNSIGNED NOT NULL, PRIMARY KEY(id),
FOREIGN KEY(overtime_request_id) REFERENCES ts_overtime_requests(id) );

二次查询成功

CREATE TABLE ts_overtime_scheme_details_histories( id INT AUTO_INCREMENT NOT NULL, 
hour FLOAT,
ratio FLOAT,
overtime_scheme_history_id INT(11) UNSIGNED NOT NULL,
PRIMARY KEY(id));

现在我正在尝试将第二个表连接到第一个表。所以第一个表在第二个表上有外键。所以我运行了第三个查询

ALTER TABLE ts_overtime_scheme_details_histories ADD FOREIGN KEY (`overtime_scheme_history_id`) REFERENCES `ts_overtime_scheme_histories` (`id`) ON DELETE CASCADE;

但不知何故失败了。报错如下

General error: 1005 Can't create table `db_test`.`#sql-ea4_28` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: ALTER TABLE ts_overtime_scheme_details_histories
ADD FOREIGN KEY (`overtime_scheme_history_id`) REFERENCES `ts_overtime_scheme_histories` (`id`)
ON DELETE CASCADE;)

有人可以帮我找到我错过的东西吗?起初我怀疑主键和外键数据长度不相似,但仔细检查后发现是正确的。

编辑:表 ts_overtime_requests 是使用 laravel 框架创建的。

最佳答案

外键列的列数据类型必须完全与引用键列的数据类型匹配。

在这种情况下,报告的行为(错误 1005)是预期的,因为两列的数据类型不同。

其中一列是有符号整数,另一列是UNSIGNED整数。

快速修复是更改 overtime_scheme_history_id 的数据类型,以便对其进行签名。 (删除 UNSIGNED 关键字。)

关于mysql - 无法设置外键mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41354581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com