gpt4 book ai didi

mysql - 添加外键时出现错误 1215。帮助我解决我没有尝试过的事情

转载 作者:行者123 更新时间:2023-11-29 09:31:31 25 4
gpt4 key购买 nike

我正在尝试在两个现有表之间设置外键关系,但由于某种原因我错过了,我不断收到此错误 1215。

两个表的相关字段为:

CREATE TABLE `approvals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_contract` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`lang` varchar(8) NOT NULL,
`request_ts` datetime NOT NULL,
`version` int(11) NOT NULL,
-- more nullable columns here with no indexing/relationships
PRIMARY KEY (`id`),
KEY `approval_id_user` (`id_user`),
KEY `version` (`version`,`lang`,`id_contract`),
CONSTRAINT `approval_id_user` FOREIGN KEY (`id_user`)
REFERENCES `users` (`iduser`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1079 DEFAULT CHARSET=utf8
CREATE TABLE `version` (
`idversion` int(11) NOT NULL,
`idcontract` int(11) NOT NULL,
`language` varchar(8) NOT NULL,
PRIMARY KEY (`idversion`,`idcontract`,`language`),
KEY `fk_version_contracts_idx` (`idcontract`),
CONSTRAINT `fk_kidversion_contracts` FOREIGN KEY (`idcontract`)
REFERENCES `contracts` (`id_contract`)
ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我尝试了什么
我检查的第一件事是持久性:

SELECT * FROM approvals a 
WHERE NOT EXISTS (
SELECT 1 FROM version v
WHERE v.idcontract = a.id_contract AND v.language = a.lang
AND v.idversion = a.version);

这导致 701 中返回 0 行,好吧,从数据 pov 来看我的数据库应该很好。

所以我检查了排序规则,由于某种原因,版本表是 latin1 与 utf8_generic_ci,好的,所以我用这个将版本表恢复为 utf8。

ALTER TABLE `kidversion` 
COLLATE = utf8_general_ci;

-- and for good measure
ALTER TABLE `kidversion`
CHANGE COLUMN `language` `language` VARCHAR(8)
CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NOT NULL;

但此时我在尝试创建外键时仍然遇到错误:

ALTER TABLE `approvals` 
ADD CONSTRAINT `approval_ibfk_1`
FOREIGN KEY (`version` , `lang` , `id_contract`)
REFERENCES `version` (`idversion` , `language` , `idcontract`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

我所做的每一步都会得到 1215 分。我肯定错过了一些东西......任何人都可以帮我解决这个问题吗?

最佳答案

外键(版本langid_contract)引用版本(idversion >、语言idcontract)和主键(idversionidcontract语言 )不匹配的字段必须具有相同的顺序和相同的类型。“在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。” -https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

关于mysql - 添加外键时出现错误 1215。帮助我解决我没有尝试过的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58608069/

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