[MySQL]:从两个依赖表中删除行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[MySQL]:从两个依赖表中删除行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1463字,纯文字阅读大概需要3分钟。
内容图文
![[MySQL]:从两个依赖表中删除行](/upload/InfoBanner/zyjiaocheng/912/d44fa77c034e46df89ccaf281e77bacc.jpg)
我试图根据第三个表ID删除两个从属表中的所有行.
表结构:
Transaction
-Transaction_ID (primary)
-Timestamp
Purchase
-Item_ID
-Transaction_ID
-Purchase_ID (primary)
Item
-Item_ID (primary)
-Client_ID
我想从事务/购买中删除与项目中的Client_ID匹配的所有行.听起来很简单……即使我可以把我的新手包裹起来……
DELETE dbName.t FROM
dbName.Transaction t
JOIN
dbName.Purchase p
ON
p.Transaction_ID = t.Transaction_ID
JOIN
dbName.Item i
ON
p.Item_ID = i.Item_ID
WHERE
Client_ID = 1
不…
我得到这个错误外键约束失败… – 我相信很多人并不感到惊讶.
Purchase使用t.Transaction_ID的问题是什么? – (因此,这个外键会失败)
或者该表中可能存在其他t.Transaction_ID相关数据(我还没有找到).
编辑:完成错误
Cannot delete or update a parent row: a foreign key constraint fails
(`ItemTracker_dbo/Purchase`, CONSTRAINT `FK_Purchase_Transaction`
FOREIGN KEY (`Transaction_ID`) REFERENCES `Transaction` (`Transaction_ID`)
ON DELETE NO ACTION ON UPDATE CASCADE)
解决方法:
只要依赖记录仍存在于另一个表中,就无法从表中删除.在你的情况下,依赖是这样的
Transaction <- Purchase -> Item
因此,您需要先删除任何购买,然后才能删除交易.
作为这两步方法的替代方案,我建议设置一个ON DELETE CASCADE constraint并使用此方法:
DELETE
Transaction
WHERE
Transaction_ID IN (
SELECT
Transaction_ID
FROM
Purchase INNER JOIN Item ON Item.Item_ID = Purchase.Item_ID
WHERE
Item.Client_ID = <your Client ID here>
)
请注意,这将删除任何具有匹配Client_ID的依赖项的事务(以及通过CASCADE,任何购买),无论其中是否还有任何其他项.如果这不是你想要的,那么问题需要改进.
内容总结
以上是互联网集市为您收集整理的[MySQL]:从两个依赖表中删除行全部内容,希望文章能够帮你解决[MySQL]:从两个依赖表中删除行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。