数据库多版本控制2019_如何在多个环境中处理数据库版本控制

数据库多版本控制2019

好的,这就是这种情况:您在一个团队中工作,并且每个开发人员都在本地环境中工作。 或者您有多个环境。 或者...我们不在乎。 唯一的一点是,你必须处理不同版本的数据库,你不知道如何安全有效地做到这一点。

数据库的不同版本在数据或结构方面可能有所不同。 在本文中,我们将通过使用带有MySQL示例的关系数据库词汇,着重于管理具有不同结构的不同版本的数据库。 但是,此解决方案可以用于任何类型的数据库,例如NoSQL。

潜在的解决方案

在这里,我们假设您是在一个团队中工作,并且您有一个在人与人之间共享代码的工具(例如:GIT,SVN)。

让我们在项目中创建一个脚本,在其中放置所有数据库演化。 可以是SQL脚本,连接到数据库的任何编程语言的代码或其他解决方案。 这并不重要,唯一的可能就是您可以执行数据库请求。当开发人员想要更改数据库结构时,他将在该文件的末尾编写一段代码(一个或多个请求),并与该文件共享其他人。 重要的是要使该文件保持最新状态并在所有环境中定期运行。

此时,如果多次执行该文件,则肯定会遇到一些错误。 这是有问题的,因为您需要在每次更新时运行此文件。 因此,您必须在每个块上添加条件,并将已执行的块存储到数据库中。 为此,您可以在数据库中创建一个表来存储每个具有唯一ID的演变。 最后,仅当该表上尚未存储ID时,您才运行该块。

就这样。 以下示例说明了该过程。

本示例基于一个开发项目,该项目使用MySQL数据库存储一些应用程序数据。 有两个开发人员在其笔记本电脑的本地环境(sso 2开发环境)中进行开发,并且有一个生产环境。 对于每种环境,都有一个数据库。 数据库已经存在,但是我们要确保每个环境上的数据库版本相同(结构相同)。

通常,在项目中,数据库随项目代码一起发展。 因此,如果更新数据库,则必须更新代码,反之亦然。

首先,让我们创建一个表来存储演化。 我们必须在所有数据库上执行此请求:

CREATE TABLE db_evol(
	id_evol VARCHAR ( 10 ) PRIMARY KEY NOT NULL
);

现在,让我们在第一个版本中在项目中创建一个文件db_evol.sql。 在这里,我们使用MySQL过程,但我们可以使用其他过程。

delimiter //-- evol1
create procedure evol() 
begin
	set @id_evol := "evol1" ;
	SET @ count := ( select COUNT (*) FROM db_evol WHERE id_evol= @id_evol);
    if @count = 0 then
    	-- This 2 lines correspond to the DB evolution
		ALTER TABLE table1 ADD new_col VARCHAR ( 255 );
		UPDATE table1 set new_col = 'default value' ;
		INSERT INTO db_evol(id_evol) VALUES (@id_evol);
        SELECT CONCAT (@id_evol, " executed" );
	else
		SELECT CONCAT (@id_evol, " skipped" );
	end if ;
end //
call evol()//
drop procedure evol//

下一步是第二个想要更新数据库的开发人员。 首先,我检查文件db_evol.sql是否最新。 如果有更改,我将运行该文件。 之后,我将在文件末尾编写第二个版本并测试脚本。 如果可以,我将更新项目文件。

经过几次发展,所有开发人员都同意更新生产环境。 因此,他们将更新代码并在生产环境上运行脚本db_evol.sql。

结论

本文概述了如何在多个环境中处理数据库版本。 如我们所见,不仅有一种解决方案:您将面对不同的情况。 为了在出现错误的情况下恢复到初始状态,可以在脚本中添加事务或错误处理。

先前发布在 https://4sushi.github.io/#articles/how-to-handle-database-versions

翻译自: https://hackernoon.com/how-to-handle-database-versioning-on-multiple-environments-b45a3v51

数据库多版本控制2019

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值