Mysql 删除级联而不更改表结构
我的数据库被测试数据污染了,我想清理一些行。 若我尝试删除,我会收到一条消息,外键约束失败。 如果可能的话,我希望避免更改表结构并添加级联 我试过这样的方法:Mysql 删除级联而不更改表结构,mysql,foreign-keys,sql-delete,cascade,Mysql,Foreign Keys,Sql Delete,Cascade,我的数据库被测试数据污染了,我想清理一些行。 若我尝试删除,我会收到一条消息,外键约束失败。 如果可能的话,我希望避免更改表结构并添加级联 我试过这样的方法: DELETE from transactions WHERE itemID = (SELECT itemID from items WHERE price=0); DELETE from items WHERE price=0; 但这不起作用,因为不允许subselect返回多行。我假设可以用循环来做一些魔术,但是我没有使用那些没有循环
DELETE from transactions WHERE itemID = (SELECT itemID from items WHERE price=0);
DELETE from items WHERE price=0;
但这不起作用,因为不允许subselect返回多行。我假设可以用循环来做一些魔术,但是我没有使用那些没有循环的答案的经验,我也很欣赏
模式:
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;
我希望这有助于