1

「名前」と「メール」が一緒に存在するエントリがない場合にのみ挿入したい。

そのため、「名前」が別の電子メールで存在していても、その逆でも問題ありません。

mysql_query("INSERT INTO 
             list (name,email) 
             VALUES ('$name','$email') 
             ON DUPLICATE KEY 
             UPDATE name='$name',email='$email'");

名前と電子メールの両方の主キーを作成しましたが、ON DUPLICATE ステートメントは効果がありません。

4

2 に答える 2

1

名前と電子メールを組み合わせた一意のキーである場合、データセットがすでに存在する場合は、更新ステートメントをトリガーする(まったく同じ値で上書きする)ことは意味がありません。このような場合、実際にはINSERTを実行してから、データベースがキー制約違反で応答するかどうかを確認します。これは予想されるエラーであり、無視されます。それ以外はまだエラーです。

私はこのNO-OPアップデートでこれを沈黙させません。

于 2012-12-19T02:00:37.210 に答える
0

機能するには、複合一意キーが必要ですON DUPLICATE KEY UPDATE

CREATE UNIQUE INDEX name_email ON list (name, email);

それが呼ばれた理由ですON DUPLICATE **KEY** UPDATE

于 2012-12-19T01:57:21.457 に答える