gpt4 book ai didi

仅 mysqldump 模式,模式更新而不删除

转载 作者:可可西里 更新时间:2023-11-01 07:36:01 25 4
gpt4 key购买 nike

我正在研究在提交更改之前使用 git 预提交 Hook 导出 MySQL 数据库模式,以便其他开发人员可以使用 git 存储库中的 SQL 脚本更新他们自己的数据库。

默认情况下,mysqldump(我正在使用 --no-data)将在重建它们之前删除现有表,这不是我想要的。我想知道是否有人知道一种方法来执行 mysqldump 或类似的方法来用 SQL 描述数据库模式以更新表(如果它们存在)而不是删除和重建。我意识到这可能是一个远景,但如果有人能指出我正确的方向,那就太好了。

最佳答案

MySQL 怎么知道要更新什么?它不知道其他人的数据库将处于什么状态,所以它不知道要应用什么更新。此外,更新经常需要的不仅仅是更改架构;他们可能需要更改已经存在的数据,或者可能需要将数据从旧模式移动到新模式。你永远不会得到会自动检测所有这些的东西。

正确的解决方案是编写迁移。每次更改数据库时,而不是仅仅自己更改开发副本的模式,您编写一个脚本来从以前的模式更新到新的模式(通常是一个脚本来降级回以前的模式,所以你可以如果您需要回滚更新)。该脚本会执行更改架构、移动数据等所需的任何操作。

大多数现代网络框架,如 Ruby on Rails ,支持迁移,以便更轻松地跟踪您已经运行的迁移。如果您没有使用支持迁移的框架,那么编写自己的脚本来应用迁移也不会太难。只需对每个迁移进行编号,或在其中输入日期,并在数据库中保留一个表,仅存储您所在架构的当前版本。当您运行迁移脚本时,如果有任何迁移比当前版本更新,请按顺序应用这些脚本,然后更新数据库中表明您所处版本的数字。

关于仅 mysqldump 模式,模式更新而不删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721012/

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