databaseChangeLog 文件 <changeset>标签

本文详细介绍了数据库变更日志changelog文件中的<changeset>标签,包括其属性id、name和在文件中的顺序对执行的影响。每个<changeSet>代表一个事务,执行完毕后自动提交,若出错则回滚。此外,讨论了runAlways和runOnChange属性的用法,并列举了如建表、建主键、加减字段和更新数据等常见变更集示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.changelog文件的<changeset>标签

一个<changeSet>标签对应一个变更集, 由属性id、name,以及changelog的文件路径唯一标识。
changelog在执行的时候并不是按照change log的id的顺序,而是按照changeSet在changelog中出现的顺序

changelog中的一个changeSet对应一个事务,在changeSet执行完后commit,如果出现错误则rollback;

<changeSet>标签的 runAlways属性:即使已经执行过,仍然每次都执行;
<changeSet>标签的 runOnChange 属性: 由于DATABASECHANGELOG表中还记录了changeSet的MD5校验值MD5SUM,如果changeSet的id和name没变,而内容变了,则由于MD5值变了,即使runAlways的值为True,执行也是失败的,会报错。这种情况应该使用。
 

 2.常用到的一些 changeset

建表的changeset

<changeSet author="ds" id="201908091500_T_TABLE_NAME_DDL-1">
	<preConditions onFail="MARK_RAN">
		<not>
			<tableExists tableName="T_TABLE_NAME" />
		</not>
	</preConditions>
	<createTable tableName="T_TABLE_NAME">
		<column name="ID" remarks="pk" type="NUMBER(19)">
			<constraints nullable="false" />
		</column>			
		<column name="LOCK_TYPE" type="NUMBER(2)" />
 		<column name="INSERT_TIME" type="date" /> 
	</createTable>
</changeSet>

 建主键的changeset 

<changeSet author="ds" id="201908091500_T_TABLE_NAME_DDL-2">
	<preConditions onFail="MARK_RAN">
		<not>
			<primaryKeyExists tableName="T_TABLE_NAME" primaryKeyName="ID" />
		</not>
	</preConditions>
	<addPrimaryKey columnNames="ID" tableName="T_TABLE_NAME" />
</changeSet>

加字段的changeset 

<changeSet author="ds" id="201908091500_T_TABLE_NAME_DDL-3">
	<preConditions onFail="MARK_RAN">
		<not>
			<columnExists tableName="T_TABLE_NAME" columnName="CODE" />
		</not>
	</preConditions>
	<addColumn tableName="T_TABLE_NAME">
		<column name="CODE" remarks="" type="VARCHAR2(40)" />
	</addColumn>
</changeSet>

 删字段的changeset

 <changeSet author="ds" id="201908091500_T_TABLE_NAME_DDL-4">
	<dropColumn columnName="code1" tableName="T_TABLE_NAME" />
</changeSet>

 更新数据的changeset

<changeSet author="ds" id="201908091500_T_TABLE_NAME_DDL-5" dbms="oracle"failOnError="false">
	<sql splitStatements="false" stripComments="true">
		update t_table_name s set s.code=s.code1  
	</sql>
</changeSet>

 建sequence的changeset 

<changeSet author="ds" id="201908091500_T_TABLE_NAME_DDL-6">
	<preConditions onFail="MARK_RAN">
		<not>
			<sequenceExists sequenceName="S_TABLE_NAME" />
		</not>
	</preConditions>
	<createSequence cacheSize="20" cycle="false"
			incrementBy="1" maxValue="999999999999" minValue="1" ordered="false"
			sequenceName="S_TABLE_NAME" startValue="1" />
	</changeSet>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值