web-dev-qa-db-ja.com

存在する場合は更新、そうでない場合は挿入

UPDATEmachineというテーブルに使用されるSTORED PROCEDUREを作成しようとしています。このテーブルには3つの列(machine_idmachine_namereg_id)があります。

前述の表では、reg_idINT)はmachine_idの値を変更できる列です。

QUERY/PROCEDUREを定義して、reg_idがそのテーブルにすでに存在するかどうかを確認します。存在する場合は、その行をUPDATEし、そうでない場合はINSERTを新しい行にします。

誰かがQUERY/PROCEDUREを書くのを手伝ってくれませんか?

14
Taz

これが役に立てば幸い DUPLICATE KEY UPDATE

create table machine(
  machine_id int not null primary key,
  machine_name varchar(50),
  reg_id int
);

insert into machine (machine_id, machine_name, reg_id)
values(1, 'my_machine', 1);

INSERT INTO machine (reg_id, machine_id, machine_name) VALUES (1, 1, 'test_machine')
  ON DUPLICATE KEY UPDATE machine_name=VALUES(machine_name);

作業する SQL Fiddle

12
Craig Efrein

問題は、通常のクエリのように使用できないことです。 [〜#〜] if [〜#〜]または[〜#〜] while [〜#〜]のような制御構造は、ストアドプロシージャまたは関数でのみ許可されます。

次のようなプロシージャを作成するだけです。

delimiter $$
create procedure select_or_insert()
begin
  IF EXISTS (select * from users where username = 'something') THEN
    update users set id= 'some' where username = 'something';
  ELSE 
    insert into users (username) values ('something');
  END IF;
end $$
delimiter ;

次のように呼び出します。

call select_or_insert();

そして完了

11
Bill N. Varelli