Domanda

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?

È stato utile?

Soluzione

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>

Altri suggerimenti

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top