gpt4 book ai didi

git - 如何转储 MySQL 数据库的结构并将其导入以使用现有数据更改表?

转载 作者:行者123 更新时间:2023-11-29 07:05:10 24 4
gpt4 key购买 nike

首先给出一些背景信息,我的用例是我和我的合作伙伴处于 Web 应用程序的早期阶段。数据库已经设计好了,但我们最终还是要对结构进行更改以适应我们的需要。因此,我们需要一种将结构更改来回传递到数据库的方法。我一直在尝试使用 git 来存储 mysqldumps,以便我们可以来回传递所有数据(以及恢复错误),但是由于我们的帖子具有冲突的主键,我们遇到了重大冲突!如果有任何解决方法,我的其余问题将大部分没有实际意义。假设没有解决方案,我需要某种方法来转储无需从数据库表中删除所有现有数据即可运行的结构。

我学会了如何使用 mysqdump -d 仅转储 MySQL 数据库的结构。但是,这包括 DROP 和 CREATE 命令。因此,运行此 SQL 脚本会导致我的数据库为空(因为每个表在创建之前都已删除)。我正在寻找一种方法来转储我的数据库结构,以便我可以导入它而不丢失我的数据。简而言之,我希望能够转储数据库并输出 ALTER 命令,或类似的效果。

既然我的问题已经讲到这里了,似乎不太可能使用 ALTER 命令转储数据库。无论如何,有没有一种方法可以转储 MySQL 数据,这样它就可以在不删除现有数据的情况下更改表的结构?

非常感谢!

典范

最佳答案

您已经有了答案——编写改变数据库结构的脚本,在 git 中对它们进行版本控制,并提出运行它们的过程。任何正在更改结构的人都应该在 sql 脚本中将这些更改形式化。通常它只是 create table 或 alter table DDL。与任何其他类型的代码一样,应对这些更改进行测试。然后,对于你们中的任何一个人来说,从 git 获取最新的所需 update.sql 脚本并通过命令行 mysql 或在工具中运行它就足够简单了。

有时仅仅改变表格是不够的——您还需要执行转换数据的查询。我还将锁定相关表,以便在需要时可以针对生产运行这些查询。只需将脚本命名为 name.sql,并就如何命名它们以及将它们存储在树中的位置建立约定。它可以像 update_1.sql 一样简单。如果您已经对 DDL 进行了版本控制,则可以将它们粘贴到该目录中。

另一件事...大多数更改表更改不会影响数据库中的数据。在极少数情况下可能会出现问题,但您始终可以在脚本中编写解决方法,例如使用临时列或表,以及一些在翻译过程中来回移动数据的 sql 语句。

有一些工具可以为您完成此类工作,但我不明白为什么在控制结构更改时需要它们。 PHP ORM Doctrine2 具有其中一些功能,我见过其他提供相同类型功能的产品……比较 2 个数据库并确定同步结构所需的结构更改和 DDL。当你们都试图独立工作时,这对你们没有帮助。

我的建议简单有效,并已在我参与的众多项目中得到应用。

关于git - 如何转储 MySQL 数据库的结构并将其导入以使用现有数据更改表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7763290/

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