我的数据库被测试数据污染,我想清理一些行。 如果我尝试删除,我会收到外键约束失败的消息。 如果可能的话我想避免更改表结构(添加 ON CASCADE)
我尝试过这样的事情:
DELETE from transactions WHERE itemID = (SELECT itemID from items WHERE price=0);
DELETE from items WHERE price=0;
但这不起作用,因为子选择不允许返回多行。我认为可以用循环做一些魔法,但我在使用这些方面的经验为零(也感谢没有循环的答案;))
架构:
CREATE TABLE items (itemID int, price int, description varchar(30), PRIMARY KEY(itemID));
CREATE TABLE transactions (transactionID int, itemID int, PRIMARY KEY (transactionID) , FOREIGN KEY (itemID) REFERENCES items(itemID));
INSERT INTO items VALUES (1, 0, "TEST");
INSERT INTO items VALUES (2, 0, "TEST2");
INSERT INTO transactions VALUES (1, 2);
INSERT INTO transactions VALUES (2, 2);
INSERT INTO transactions VALUES (3, 1);
最佳答案
可以通过将“=”替换为“IN”来解决该问题,这样您的 SQL 如下所示:
DELETE from transactions WHERE itemID IN (SELECT itemID from items WHERE price=0);
DELETE from items WHERE price=0;
我希望这会有所帮助...
关于mysql - 删除Cascade而不改变表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47153269/