当我这样做时-
<modifyDataType
tableName="EMCostUnit"
columnName="GUID"
newDataType="VARCHAR(50)"/>
在 liquibase 中,它总是重置可为空的约束。是否可以添加一些参数,这样它就不会删除约束,因为现在在每个
modifyDataType
之后,我需要额外的 changeSet
来添加回非空约束。
根据您遇到的问题 - 您必须使用 MySQL DBMS。
如果您指的是
NOT NULL
约束,则可以将其添加为 newDataType
- 的一部分
<modifyDataType
tableName="EMCostUnit"
columnName="GUID"
newDataType="VARCHAR(50) NOT NULL"/>
生成的 SQL 将是:(在 MySQL 上检查)
ALTER TABLE EMCostUnit MODIFY GUID VARCHAR(50) NOT NULL;
@orikosaki 的答案有效。但是,根据 Liquibase 的 文档,
newDataType
字段将 Only modifies the data type itself and cannot define constraints
我建议在修改数据类型之后添加 addNotNullConstraint 只是为了安全并确保添加非空约束。
示例(在 yaml 中):
databaseChangeLog:
- changeSet:
id: 1
author: your_name
changes:
- modifyDataType:
tableName: EMCostUnit
columnName: GUID
newDataType: nvarchar(50)
- changeSet:
id: 2
author: your_name
changes:
- addNotNullConstraint:
tableName: EMCostUnit
columnName: GUID
columnDataType: nvarchar(max)
constraintName: const-name
在 xml 中:
<changeSet author="your-name" id=1>
<modifyDataType
columnName="GUID"
newDataType="nvarchar(50)"
tableName="EMCostUnit"/>
</changeSet>
<changeSet author="your-name" id=2>
<addNotNullConstraint
columnName="GUID"
columnDataType="nvarchar(50)"
constraintName="const-name"
tableName="EMCostUnit"/>
</changeSet>
请注意,在addNotNullConstraint中,mssql、mysql、informix和mariadb需要属性columnDataType。