2

私はmysqlテーブルでレコードを挿入/更新しようとしています。主キーとは関係がないため、ON DUPLICATE KEY は使用できません。

基本的に、データベース内のレコードを更新する必要があります

INSERT INTO table (city, state, gender, value) VALUES ("delhi","delhi","M",22)

その都市、州、性別の記録が存在する場合は、単に値を上書きします。

プログラミング言語から 2 つのクエリを送信せずにこれを達成できますか

4

2 に答える 2

4

実際には引き続き使用できますON DUPLICATE KEY。次の列に一意のインデックスを追加するだけです。

ALTER TABLE tbl_name ADD UNIQUE index_name (city, state, gender)

あなたのクエリは今、

INSERT INTO table (city, state, gender, value) 
VALUES ('delhi','delhi','M', 22)
ON DUPLICATE KEY UPDATE value = 22
于 2012-12-16T14:41:49.497 に答える
3

ON DUPLICATE KEYやなどの構造はREPLACE INTO、まさにそれを防ぐために特別に設計されていることに注意してください。アプリケーション層からの 2 つのクエリを防ぐ唯一の方法は、同じことを行うデータベース関数を宣言することです。

したがって、UNIQUE(city, state, gender)同じ列にまたがるキーまたは主キーを追加します。2 つの違いは、各列の値の範囲にあります。主キーは強制しNOT NULLますUNIQUEが、列を許可しますNULL

NULL違いはわずかですが、値は一意であると見なされるため、予期しない結果になることがあります。たとえば、データベースに次のデータがあるとします。

nr  | name
123 | NULL

別のものを挿入しようとして(123, NULL)も、使用しても文句はありませんUNIQUE(nr,name)。これはバグのように思えるかもしれませんが、そうではありません。

于 2012-12-16T14:43:33.637 に答える