Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 删除级联而不更改表结构_Mysql_Foreign Keys_Sql Delete_Cascade - Fatal编程技术网

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;
我希望这有助于