gpt4 book ai didi

mysql不允许外键

转载 作者:行者123 更新时间:2023-11-29 02:02:59 27 4
gpt4 key购买 nike

很多人都遇到过这个问题,但是在其他帖子中没有找到合适的解决方案。

我有两个表,一个名为“sales”,另一个名为“host_flags”。我想要 host_flags.sales_id 到 sales.id 的外键,但 mysql 不允许!我在每个表中都定义了主索引,所以我想知道为什么......

host_flags 表在 host_id 列上已经有一个外键,但即使我尝试先为销售 ID 创建外键,它也不让我这样做。

表格看起来像:

CREATE TABLE `sales` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`creation` datetime DEFAULT NULL,
`lastupdate` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

CREATE TABLE `host_flags` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`host_id` int(11) DEFAULT NULL,
`sales_id` int(11) DEFAULT NULL,
`creation` datetime DEFAULT NULL,
`lastupdate` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `host_id6` (`host_id`),
CONSTRAINT `host_id6` FOREIGN KEY (`host_id`) REFERENCES `hosts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `hosts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`creation` datetime NOT NULL,
`lastupdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32225 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

我收到此错误消息:

MySQL said: Can't create table 'primarydata.#sql-191_1' (errno: 150)

谢谢!

查尔斯

找到解决方案

主索引的所有整数都必须是有符号或无符号的 - 不能混合。

最佳答案

通常:

我喜欢在构建完所有表后在表定义之外声明 FK 约束。

ALTER TABLE `tbl`
ADD CONSTRAINT `constr`
FOREIGN KEY `fk_id` REFERENCES `ftbl`(`id`)
ON UPDATE CASCADE
ON DELETE CASCADE;

这样我可以确定问题不是类似于 tbl 的数据类型. fk_idftbl 中的一个不一样. id (包括@Devart 所说的UNSIGNED)。或者没有声明 ftbl . id作为独特的。无论表的声明顺序如何。

完成此操作后,我可以将约束重新集成到表定义中,并考虑需要创建表的顺序以允许添加约束。

你的问题:

-- creating the sales table
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

-- creating the host_flags table
`sales_id` int(11) DEFAULT NULL,

-- the sales.id is declared as unsigned
-- the host_flags.sales_id is declared signed

关于mysql不允许外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632978/

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