سؤال

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