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

SETオプションを使用したINSERTクエリでONDUPLICATEKEY UPDATEを使用できますか?

    ON DUPLICATE KEY UPDATEを使用しました 多くの。状況によっては、実際に使用する価値のある非標準のSQL拡張機能です。

    まず、一意のキー制約が設定されていることを確認する必要があります。 ON DUPLICATE KEY UPDATE 関数は、一意のキー違反があった場合にのみ機能します。

    一般的に使用される形式は次のとおりです。

     $query = "INSERT INTO $table (column1, column2, column3)
     VALUES ('value-1', 'value-2', 'value-3')
     ON DUPLICATE KEY UPDATE
     column1 = values(column1),
     column2 = values(column2),
     column3 = values(column3);"
    

    column1 = values(column1) 「クエリが重複キー違反にヒットしなかった場合に挿入されたであろう値でcolumn1を更新する」を意味します。つまり、column1を、挿入が機能した場合の値に更新することを意味します。

    このコードを見ると、挿入しようとしている3つの列すべてを更新しているのは正しくないようです。どの列に固有の制約がありますか?

    編集:OPからの質問ごとにmysql挿入ステートメントの「SET」形式に基づいて変更します。

    基本的にON DUPLICATE KEY UPDATEを使用します 、通常どおりに挿入ステートメントを記述しますが、ON DUPLICATE KEY UPDATEを追加します。 節は最後に付けられました。私はそれがこのように機能するはずだと信じています:

    INSERT INTO $table 
        set column1 = 'value-1',
            column2 = 'value-2',
            column3 = 'value-3'
    ON DUPLICATE KEY UPDATE
        column1 = values(column1),
        column2 = values(column2),
        column3 = values(column3);
    

    繰り返しますが、挿入する列の1つには、一意のインデックス(または列の組み合わせ)が必要です。これは、そのうちの1つが主キーであるか、テーブルに一意のインデックスがあることが原因である可能性があります。



    1. Pythonを介してPython辞書をmysqlDBに保存する方法

    2. データベースの外部キー/主キーとしてのVARCHARは良いですか、悪いですか?

    3. mysqliクエリは最初の行のみを返します

    4. 外部キーをNULLにしたり、重複させたりすることはできますか?