我为liquibase创建了数据库ChangeLog,并且具有“ CREATE TABLE”查询。 我想向“状态”列添加条件。
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
<changeSet id="1" author="xxx">
<comment>Create Asset table</comment>
<sql>
CREATE TABLE `TASK`(
`TASK_ID` bigint(20) NOT NULL,
`STATUS` VARCHAR(10), //(where status not equal to "pending")
`FILE_ID` varchar(100),
PRIMARY KEY (`DOC_ID`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
</sql>
</changeSet>
</databaseChangeLog>
答案 0 :(得分:0)
如果要根据某些条件更新列数据类型,可以将<preConditions>
与<sqlCheck>
一起使用,然后使用<modifyDataType>
。
因此,假设已经有一个名称为TASK
的表,并且其中包含名为STATUS
的列,则可以这样修改其数据类型:
<changeSet id="1" author="xxx">
<comment>Update Asset table</comment>
<preConditions onFail="MARK_RAN">
<and>
<columnExists tableName="TASK" columnName="STATUS"/>
<sqlCheck expectedResult="0"> SELECT COUNT(*) FROM TASK WHERE STATUS = "pending";</sqlCheck>
</and>
</preConditions>
<modifyDataType tableName="TASK" columnName="STATUS" newDataType="VARCHAR(10)"/>
</changeSet>
或者您可能想要其他onFail
行为。看看这个link
HALT -立即停止执行整个更改日志[默认]
继续-跳过更改集。执行变更集将是 在下一次更新时再次尝试。继续更改日志。
MARK_RAN -跳过更改集,但将其标记为已运行。继续 更改日志
警告-输出警告并继续执行正常设置的更改。