gpt4 book ai didi

mysql - 我遇到 MySQL 约束问题

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

我在正确使用约束时遇到一些问题。

我有三个表:“item”、“store”和“link_item_store”。一件元素可以在一个或多个商店中,并且一个或多个商店可以拥有一件元素。由于这是多对多关系,我使用“link_item_store”进行标准化。

如果我删除一个项目,我必须删除“link_item_store”表中该项目的所有实例。商店也是如此。这是我的表及其约束:

CREATE TABLE `link_item_store` (
`fk_storeID` int(11) unsigned NOT NULL,
`fk_itemID` int(11) unsigned NOT NULL,
PRIMARY KEY (`fk_storeID`,`fk_itemID`),
KEY `fk_storeID` (`fk_storeID`),
KEY `fk_itemID` (`fk_itemID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci;

ALTER TABLE `link_item_store`
ADD CONSTRAINT `link_item_store_ibfk_2` FOREIGN KEY (`fk_itemID`) REFERENCES `link_item_store (`fk_itemID`) ON DELETE CASCADE,
ADD CONSTRAINT `link_item_store_ibfk_1` FOREIGN KEY (`fk_storeID`) REFERENCES `link_item_store` (`fk_storeID`) ON DELETE CASCADE;

这是一个示例列表:

fk_storeID, fk_itemID, itemName, storeName
11 7277 item 1 Test store
11 7278 item 2 Test store
11 7280 item 3 Test store
12 7277 item 1 Test store 2
12 7278 item 2 Test store 2
12 7290 item 4 Test store 2
35 7295 item 4 Test store 4
35 7299 item 5 Test store 4
35 7300 item 6 Test store 4
35 7302 item 7 Test store 4

我的问题是,如果我从“item”表中删除“item 7”,所有引用都会从 link_item_store 中删除。 :(

要做什么?

更新:通过对表设置这两个约束,我无法将新数据插入到表中。我收到以下错误消息:

Unable to query local database <b>Cannot add or update a child row: a foreign 
key constraint fails ( `link_item_store`, CONSTRAINT
`link_item_store_item_ibfk_1` FOREIGN KEY (`fk_storeID`) REFERENCES
`link_item_store` (`fk_storeID`) ON DELETE CASCADE)</b><br> INSERT INTO
link_item_store (fk_storeID, fk_itemID) VALUES ('11', '7295')

更新 2 - 解决方案:迈克尔向我指出添加约束看起来不正确。仔细一看,我发现他是对的。这是 PhpMuAdmin 在添加约束后生成的代码:

ALTER TABLE `link_item_store` ADD FOREIGN KEY ( `fk_itemID` ) REFERENCES `mydatabase`.`link_item_store` (`fk_itemID`) ON DELETE CASCADE ;

正如你所看到的,外键引用的是它自己!这肯定是 PhPMyAdmin 中的一个错误。

解决方案是更改引用。这有效,我在向表中添加新记录时不再遇到问题:

ALTER TABLE `link_item_store` ADD FOREIGN KEY ( `fk_itemID` ) REFERENCES `mydatabase`.`item` (`id`) ON DELETE CASCADE ;

最佳答案

你的外键语法对我来说似乎很不寻常。

而不是:

ADD CONSTRAINT `link_item_store_ibfk_2` FOREIGN KEY (`fk_itemID`) REFERENCES `link_item_store` (`fk_itemID`) ON DELETE CASCADE

尝试:

 ADD CONSTRAINT `link_item_store_ibfk_2` FOREIGN KEY (`fk_itemID`) REFERENCES item (`itemID`) ON DELETE CASCADE

(假设itemID是项目表上正确列的名称)

关于mysql - 我遇到 MySQL 约束问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1077184/

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