在Liquibase中,如果值尚未设置,我想插入值。对于普通插入,我怀疑如果插入的值已经存在,则插入的值将覆盖先前的值。我希望它仅插入(如果不存在)。能做到吗?
现在,我正在使用插入件,如下所示:
<insert tableName="state">
<column name="name" value="fooFoo"/>
<column name="enabled" valueBoolean="true"/>
</insert>
您可以参考以下问题:
MySQL: Insert record if not exists in table
只需在Liquibase中使用
希望这会有所帮助。
编辑:
INSERT INTO状态(名称,已启用)SELECT * FROM(SELECT'fooFoo','true')AS tmp不存在的地方(SELECT name FROM state WHERE name ='fooFoo')LIMIT 1
sql>
正确的方法是使用preConditions
。
有一个<sqlCheck>
前提条件。有了它,您的changeSet将如下所示:
<changeSet id="foo" author="bar">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">
SELECT COUNT(*) FROM state WHERE name='fooFoo' AND enabled=true;
</sqlCheck>
</preConditions>
<insert tableName="state">
<column name="name" value="fooFoo"/>
<column name="enabled" valueBoolean="true"/>
</insert>
</changeSet>