gpt4 book ai didi

mysql - 模拟MySql 5.7删除查询

转载 作者:行者123 更新时间:2023-11-28 23:17:44 25 4
gpt4 key购买 nike

我正在使用 InnoDB 引擎清除一个拥有超过 1000 万条记录的巨大数据库(~ 1TB 数据)。谁设置了数据库模式,设置了外键但没有设置删除级联。我想进行基于时间的选择性清除。我的问题的两个部分

  1. 我可以设置“on delete cascade”而没有任何副作用吗?
  2. 我可以模拟我的删除来检查外键引用违规吗?我知道我可以使用 START TRANSACTION 和 ROLLBACK
    TRANSACTION,但这不是我要找的东西

最佳答案

1000 万条记录很小。

1TB 很大。

这表明使用了巨大的 BLOB。在数据库中存储巨大的 BLOB 总是一个好主意:每个人都知道备份时间越长越好。

现在,

Can I set "on delete cascade" without any side-effects ?

是的,只要你不删除任何东西...

Can I simulate my delete to check for foreign key reference violation ? I know I can use START TRANSACTION and ROLLBACK TRANSACTION, but it is not something I am looking for

是的,但是 ROLLBACK 可能会花费与您取消的操作一样长的时间,如果不是更长的话,最好的事情是......您不能中断它!你会坐在你的终端前......你不知道它什么时候结束!

现在,要么它是“ON DELETE CASCADE”并且它不会失败,如果你搞砸了它只会继续删除几天,或者它是 ON DELETE RESTRICT 并且它会在第一行失败它尝试删除,不会回滚,所以速度很快。不过,这两种情况都不会“模拟”任何有用的东西。

或者它是 ON DELETE SET NULL,你的数据库最终搞砸了。

现在,如果您有巨大的 BLOB,并且想在数据库中乱搞,这就是我的建议:制作数据库的副本,但不要包含 BLOB。你知道,CREATE TABLE LIKE... 然后 INSERT INTO SELECT。只需删除巨大的 BLOB 列。然后你可以随心所欲地练习,检查你的查询是否真的删除了正确的东西......

注意:如果您删除了大约 90% 的数据库,请考虑创建新表(只使用 INSERT INTO SELECT 只保留您想要保留的行)而不是 DELETE。因为 DELETE 不会缩小文件。

关于那个:首先考虑一下。如果您复制要保留在新数据库中的内容,请阅读文档(我不记得详细信息),但也许您需要创建一个表空间或其他内容,以便稍后您可以清除旧的 1TB 几乎为空的 ibdata 文件。

关于mysql - 模拟MySql 5.7删除查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43125861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com