删除 Cascade 而不改变 table 结构

Delete Cascade without changing table structure

我的数据库被测试数据污染了,我想清理一些行。 如果我尝试删除,我会收到外键约束失败的消息。 如果可能的话,我想避免更改 table 结构(添加 ON CASCADE)

我试过这样的事情:

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

但这不起作用,因为子选择不允许 return 多行。我认为可以用循环做一些魔术,但我在使用这些循环方面的经验为零(不带循环的答案也很受欢迎;))

架构:

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;

希望对您有所帮助...