【问题标题】:How to change DELETE_RULE to CASCADE for all tables?如何将所有表的 DELETE_RULE 更改为 CASCADE?
【发布时间】:2012-01-07 19:45:01
【问题描述】:

我试过了:

use information_schema
update referential_constraints set delete_rule='cascade';

但出现以下错误:

错误 1044 (42000):拒绝用户 'root'@'localhost' 访问数据库 'information_schema'

我拥有所有特权。

【问题讨论】:

  • 您确定您拥有所有权限吗?看起来你不小心删除了一些。你能发布SHOW GRANTS; 的输出吗(在root MySQL 用户下的 MySQL 控制台中运行)。
  • 因为 information_schema 不能被修改。你应该一张一张地改变每张桌子。

标签: mysql foreign-keys constraints


【解决方案1】:

Information_schema 正是:信息。它报告数据库中的对象

要更改数据库中的对象,您需要对它们运行 ALTER。你不能通过Information_schema 视图来做到这一点

【讨论】:

  • 您可以使用information_schema 来“构建”ALTER 语句,然后您必须在表的外键上运行,但这就是它可以帮助您的全部。正如@gbn 所说,您仍然需要执行几个ALTER 语句。
  • @Romain: 是的,可能已经有脚本可以做到这一点
  • 我不会感到惊讶。虽然从头开始编写它们也不是很难...... :)
【解决方案2】:

好的,那就是

select 'alter table',table_name, 'drop foreign key ',constraint_name,';', 'alter table',table_name, '添加约束',constraint_name,'外键', '(',column_name,') 引用',referenced_table_name,'(',referenced_column_name,') 删除级联;' 来自 key_column_usage,其中 referenced_table_name 不为空;

【讨论】:

    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多