当前位置: 首页 > 面试题库 >

如何快速重命名MySQL数据库(更改架构名称)?

长孙硕
2023-03-14
问题内容

在MySQL手册的MySQL涵盖这一点。

通常,我只是转储数据库,然后使用新名称重新导入它。对于大型数据库,这不是一个选择。显然RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
做不好的事情,仅存在于少数几个版本中,并且总体而言是个坏主意。

这需要与InnoDB一起使用,后者存储的内容与MyISAM完全不同。


问题答案:

对于 InnoDB ,以下方法似乎有效:创建新的空数据库,然后将每个表依次重命名为新数据库:

RENAME TABLE old_db.table TO new_db.table;

之后,您将需要调整权限。

要在shell中编写脚本,可以使用以下任一方法:

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

要么

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

笔记:

  • 选项-p和密码之间没有空格。如果您的数据库没有密码,请删除该-u username -ppassword部分。
  • 如果某个表具有触发器,则无法使用上述方法将其移动到另一个数据库(将导致Trigger in wrong schema错误)。如果是这种情况,请使用传统方式克隆数据库,然后删除旧数据库:

mysqldump old_db | mysql new_db

  • 如果您有存储过程,则可以在以后复制它们:

mysqldump -R old_db | mysql new_db



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 如何快速重命名MySQL数据库(更改架构名称)? (47个答案) 5年前关闭。 我创建了一个名为的数据库。现在,我需要将数据库名称更改为。但是,它在MySQL工作台中被禁用。我可以在Linux服务器本身上执行此操作吗? 问题答案: 我认为您无法做到这一点。我认为您需要转储该数据库,创建新命名的数据库,然后导入转储。 如果这是一个实时系统,则需要将其删除。

  • 问题内容: 我正在尝试更改图像的存储库名称: 因此,我想将名称更改为类似: 我怎样才能做到这一点? 问题答案: 要么 标签只是完整图像名称()的可读别名。 因此,您可以根据需要使它们与同一图像关联。如果您不喜欢旧名称,则可以在重新命名后将其删除: 那只会删除。由于具有其他名称,因此不会删除实际图像。

  • 我使用嵌入式数据库H2具有默认模式PUBLIC。我想要一个模式XYZ,而不是默认的H2模式。我怎么能改变它使用液体基地。我试图创建第一个变更集来创建模式XYZ,并将模式名称属性添加到所有DDL语句中,以使用模式名称。但是数据库转换日志和数据库转换锁是在PUBLIC模式中创建的。如何为这些表指定模式? 提前感谢您的回复。

  • 问题内容: 我正在寻找一种在MySQL中为数据库命名的方法。原因是能够重命名实时生产数据库而不会导致系统停机。我想可以将数据库别名为新名称,随意更改和部署连接到数据库的代码,并最终删除旧别名。 如果有更好的方法可以做到这一点,请告诉我。 问题答案: https://dev.mysql.com/doc/refman/5.7/en/symbolic-links-to- databases.html 说

  • 我很难更改列名。我知道我的语法是正确的,但我收到了一条错误消息。 我使用的语法是: 我一直收到这个错误消息,错误1064(42000):您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第2行“COLUMN CustomerID to CollaboratorID”附近使用的正确语法 请帮忙。