I need to convert a MySQL INSERT IGNORE INTO ... statement to a changeSet in liquibase and I prefer not to insert the statement directly in the changeSet.

Since I cannot find a direct translation, I'm wondering how to write a changeSet to insert a row only if the primary key part doesn't already exists in another row of the same table?

有帮助吗?

解决方案

Liquibase doesn't have direct support for INSERT IGNORE support. If you are not wanting to use the <sql> tag, your only option is to use something like

<changeSet>
        <insert ...></insert>
        <modifySql>
             <replace replace="INSERT" with="INSERT IGNORE"/>
         </modifySql>
</changeSet>

其他提示

With a liquibase 3.2 and oracle12

<changeSet>
        <insert ...></insert>
        <modifySql>
             <replace replace="INSERT" with="insert /*+ ignore_row_on_dupkey_index(my_table, my_table_pk) */"/>
         </modifySql>
</changeSet>

remarks : Not use "replace value" but "replace replace"

It works too with the changeset loadData

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top