sql >> データベース >  >> RDS >> Mysql

mysql-挿入後、主キーの取得を無視します

    ドキュメント LAST_INSERT_ID()の場合 言う:

    これを知っていると、これを複数のステップからなるプロセスにすることができます。

    • 無視を挿入
    • LAST_INSERT_ID()の場合、完了(新しい行が挿入されました)
    • else SELECT your_primary key FROM yourtable WHERE(挿入されたデータのUNIQUE制約)

    米国の州の例:

    id  | abbrev | other_data
     1  | AL     | ...
     2  | AK     |
    
    UNIQUE KEY abbr (abbrev)
    

    次に、新しい行を挿入します:

    INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar');
    > OK
    SELECT LAST_INSERT_ID();
    > "3"
    // we have the ID, we're done
    

    無視される行を挿入する:

    INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AK','duplicate!');
    > OK
    SELECT LAST_INSERT_ID();
    > "0"
    // oops, it already exists!
    SELECT id FROM `states` WHERE `abbrev` = 'AK'; // our UNIQUE constraint here
    > "2"
    // there we go!
    

    または、これを1つのステップで実行するための回避策が考えられます。REPLACE INTOを使用してください。 INSERT IGNORE INTOの代わりに -構文は非常に似ています 。ただし、副作用があることに注意してください このアプローチでは、これらはあなたにとって重要な場合と重要でない場合があります:

    • REPLACEは行を削除して再作成します
      • つまり、DELETEトリガーはトリガーされます
      • また、行が存在する場合でもプライマリIDはインクリメントされます
      • INSERT IGNORE 古い行データを保持します、REPLACE 新しい行データに置き換えます


    1. SQL Server2014CTP1でのパーティションレベルのオンラインインデックス操作の調査

    2. LIMIT句でbindValueメソッドを適用するにはどうすればよいですか?

    3. MySQLで毎月の最後のレコードを取得します....?

    4. Oracleトリガー内で新しい行をXMLに変換します