1

そのような検索がレコードを返す場合、レコードが存在するかどうかを確認するクエリを作成しようとしています (一意の識別子ではなく、いくつかの句に基づいて)。何も見つからない場合は、見つかったすべてのレコードを更新する必要があります。サーバー側ではなくクライアント側スクリプトのクエリを作成しようとしているため、IF EXISTS を使用できないことに注意してください。だから私は INSERT INTO .... ON DUPLICATE KEY のアイデアを思いつきました

行キー識別子を知らなくてもこれを行うことはできますか? したがって、accountid = 17 および name = 'Mike' のレコードが見つかった場合、それを更新して名前を 'Mike A' にします。これらの 2 つの句を含むレコードがない場合は、レコードを挿入します。

これは私に構文エラーを与えている試みです

INSERT INTO test (name, accountid) VALUES ('Mike', 17)
  ON DUPLICATE KEY 
UPDATE test SET name='Mike A' WHERE name ='Mike' AND accountid = 17

このメソッドは、私がやろうとしていることを処理できますか? はいの場合、構文を修正していただけますか?

ありがとうございました

4

1 に答える 1

2

これを機能させる唯一の方法は、フィールドに主キーまたは一意の制約がある場合です。ドキュメントから:

ON DUPLICATE KEY UPDATE を指定し、UNIQUE インデックスまたは PRIMARY KEY で値が重複する行が挿入された場合、古い行の UPDATE が実行されます。たとえば、列 a が UNIQUE として宣言され、値 1 が含まれている場合、次の 2 つのステートメントは同じ効果があります。

create table test (name varchar(100), accountid int);
insert into test values ('Mike', 17);
alter table test add unique (name, accountid);

insert int test (name, accountid) values ('Mike', 17)
on duplicate key update name='Mike A';

一意のキーがないと、重複レコードが挿入されます。

于 2013-07-22T00:45:02.683 に答える