MySQL insertOrUpdateが存在する場合更新、存在しない場合挿入

1251 ワード

頻繁に変更されるか、大量に変更される可能性のあるビジネスシーンについて.個人的には、プライマリ・キーのジャンプを引き起こすため、この方法はお勧めしません.存在(すなわち更新)するたびに、プライマリ・キーは+1されます.つまり、テーブルに100 wのデータがある場合、変更するたびに、次のメソッドが呼び出されるたびに、プライマリ・キー+1されます.実はあなたのデータは100 wしかないかもしれませんが、結果としてプライマリ・キーは200 w以上になりました.
もしあなたがまだこのような方法を使うことを決めたら、下を見ることができます.
前提:更新または挿入の条件は、プライマリ・キー値が同じデータを挿入するなど、テーブル内の一意のインデックスが競合しているかどうかを判断します.
キー値に基づいて判断する必要がある場合は、一意のインデックスを作成する必要があります.
方式:ON DUPLICATE KEY UPDATEコマンドを使用する
Mybatis

        insert into user_agree_protocol(
        id,
        user_id,
        protocol_id,
        protocol_version
        )
        values
        
        ( #{item.id},
          #{item.userId},
          #{item.protocolId},
          #{item.protocolVersion})
        
        ON DUPLICATE KEY UPDATE
            protocol_version = VALUES (protocol_version)

SQL文の書き方とMyBatisの書き方の差は少なく、単独では与えられません.ここでVALESを使えば、挿入しようとしたが挿入に失敗した値を直接手に入れることができます.
 
最後に、私はまだもっと適切な方法を見つけていません.sqlを分解するしかありません.select、insert、updateを3つのsqlに分解します.しかし、圧力測定しても感覚効率はそれほど低くない.もっといい方法があれば、教えてください.