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

MYSQL ON DUPLICATEKEYUPDATEの質問

    ON DUPLICATE KEY UPDATE SETを実行するだけです キーが重複している場合に提供するステートメント。個々の列の値を比較するのではなく、異なる列の値を更新するだけです。 UNIQUE KEYとして定義された適切な列がある限り、やりたいことがうまくいくように聞こえます。 またはPRIMARY KEY

    ただし、私が通常行うことは、挿入を実行してからエラーをキャッチし、必要に応じて別のアクションを実行することです。これには、重複がある場合に2つのクエリを発行するという欠点がありますが、私の意見では、はるかに保守しやすくなっています。

    例:

    $db = new PDO($dsn, $user, $pass);
    $stmt = $db->prepare('INSERT INTO some_tbl (col1,col2,col3) VALUES (?,?,?)');
    $values = array('Col 1 value','Col 2 Value', 'Col 3 Value');
    try {
      $db->execute($values);
    } catch (PDOException $e) {
      if($e->getCode() == 23000){
        // dupe key do some other action whether update or otherwise
      } else {
        // rethrow non dupe errors
        throw $e;
      }
    }
    


    1. エラーコード1064、SQL状態42000:SQL構文にエラーがあります。

    2. INSERTで重複するエントリをサイレントに無視/削除するトリガー

    3. 引用符に一貫性のないCSVファイルのSQLServer一括挿入

    4. 時系列データベースの概要