删除Cascade而不更改表格结构

时间:2017-11-07 08:35:14

标签: mysql foreign-keys sql-delete cascade

我的数据库被测试数据污染,我想要清理一些行。 如果我尝试删除,我会收到外键约束失败的消息。 如果可能,我想避免更改表结构(添加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);

1 个答案:

答案 0 :(得分:1)

可以通过替换' ='来解决问题。与' IN'这样您的SQL内容如下:

DELETE from transactions WHERE itemID IN (SELECT itemID from items WHERE price=0);
DELETE from items WHERE price=0;

我希望这会有所帮助......