3

SQL Serverこのコマンドを使用して値を挿入し、IDがすでに存在する場合は値を更新します

string commandLine = "IF NOT EXISTS(SELECT clientid FROM Rating WHERE clientid = " + clientId + " AND userid = " + userid + ") " +
            "INSERT INTO Rating VALUES(@clientId,@userid,@rating) " +
            "ELSE " +
            "UPDATE Rating SET rating=@rating WHERE clientid = " + clientId + " AND userid = " + userid + ";";

そして、私は今に移動しMySQL、このコマンドは機能しません。MySQLにも同じことがありますか?

4

2 に答える 2

7

INSERT ... ON DUPLICATE KEY UPDATEは、MySQLでより簡単な構文を提供し、影響を受ける行のAPI呼び出しを介して何が起こっていたかについてのフィードバックも提供します。私の経験では、次のことを知ることがプログラムロジックにどれほど便利であるかを理解している人はほとんどいません。

ON DUPLICATE KEY UPDATEを使用すると、行ごとの影響を受ける行の値は、行が新しい行として挿入される場合は1、既存の行が更新される場合は2、既存の行が現在の値に設定される場合は0になります。

于 2013-02-26T22:44:21.607 に答える
1

clientid、useridに一意の制約または主キーがある場合は、INSERT ... ON DUPLICATEKEYUPDATE構文を使用できます。

INSERT INTO Rating VALUES(@clientId,@userid,@rating)
ON DUPLICATE KEY
UPDATE Rating SET rating=@rating
于 2013-02-26T22:46:37.413 に答える