【问题标题】:How to remove MySQL tables prefix in InnoDB database with constraints如何在具有约束的 InnoDB 数据库中删除 MySQL 表前缀
【发布时间】:2016-02-27 12:13:57
【问题描述】:

我有大约 5GB 大小的 MySQL 数据库和大约 200 个表。所有表都有我想删除的前缀,我为此找到了一些想法。

问题是该数据库使用 CONSTRAINT...FOREIGN KEY 进行了参照完整性检查。

如何在不手动修改或删除约束的情况下从表中删除前缀,包括更改约束?

【问题讨论】:

  • 重命名表的手册说“指向重命名表的外键不会自动更新。在这种情况下,您必须删除并重新创建外键才能使其功能正常。"
  • rename table (dev.mysql.com/doc/refman/5.7/en/rename-table.html) 不起作用吗?

标签: mysql database constraints innodb


【解决方案1】:

不幸的是,您必须根据rename table 上的 mysql 文档删除并重新创建外键:

指向重命名表的外键不会自动 更新。在这种情况下,您必须删除并重新创建外键 以便它们正常工作。

【讨论】:

  • 我找到了将整个数据库导出到 sql 脚本并对其进行字符串替换的想法,然后将其导入。这不是很有说服力。
【解决方案2】:

使用information_schema 中的表格(主要是TABLESCOLUMNS)来构建您需要的代码。也许 3 个脚本是明智的:

  1. SELECT CONCAT('ALTER TABLE ', table_name, ' DROP FOREIGN KEY ' ... ) FROM ...
  2. SELECT CONCAT('RENAME TABLE ', ...
  3. SELECT CONCAT('ALTER TABLE ', table_name, ' ADD FOREIGN KEY ' ... ) FROM ...

然后手动将3个脚本复​​制粘贴到mysql命令行工具中。

至于去掉前缀,看看字符串函数MIDLOCATESUBSTRING_INDEX等,看看有什么用处。

【讨论】:

    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多