mysql - 删除Cascade而不改变表结构

标签 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);

最佳答案

可以通过将“=”替换为“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/

相关文章:

mysql - 查找表中在同一数据库的任何其他表中没有引用的所有行

SQL 截断、删除、删除建议

mysql - 如何在配置单元中将时间戳转换为 gmt 格式

mysql - SQL SELECT 如何仅获取事件记录

sql - 如何在postgres中复制/插入多行数据来实现多对多关系

mysql - 使用 infile 时出现引用完整性错误,但使用 mysql CLI 时没有错误

mysql - Mysql中查找重复或更多,删除除第一个输入之外的其他

python - Django DeleteView 不会从数据中删除对象

php - Zend 1.12 中的复杂查询

Java EE、实体 Bean 和长字符串属性(mysql 文本)。如何?