MySql脚本临时将外键约束更改为级联,然后返回



我需要对一个有很多"RESTRICTED"约束的复杂数据库进行更改。

具体来说,我需要重新编号UserInfo表中的Id字段,许多其他表在更新和删除时都有"RESTICT"的外键。

我想创建一个脚本:

  1. 查找对"UserInfo"表的"Id"字段具有约束(外键)的所有表
  2. 将约束(外键)加载到变量中
  3. 将依赖表更改为"删除"外键
  4. 更改依赖表以在删除和更新时添加带有"级联"的外键
  5. …我将在此处插入更新查询
  6. 将依赖表更改为"删除"外键
  7. 更改从属表以添加回原始外键

我只是不知道如何执行步骤#2,将约束加载到变量中。

我搜索了所有information_schema数据库,找到了约束名称(即userprefs_ibfk_1)。但它没有定义它们是什么类型的约束(即"删除限制")。是否有一些安全的代码来确定它们是什么类型的约束?

我可能可以使用SHOW CREATE TABLE UserInfo,但我找不到将结果加载到变量(我可以在该变量上执行字符串函数)中的方法。

如果有任何帮助,我将不胜感激。

您已接近,需要检查referential_constraints.update_ruledelete_rule:

SELECT constraint_name
FROM information_schema.referential_constraints
WHERE
    referenced_table_name = 'UserInfo'
    AND ( update_rule <> 'CASCADE' OR delete_rule <> 'CASCADE' )

您可以将此查询包装在存储过程中,使用游标迭代结果,并从中构建和执行准备好的语句。

最新更新