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


14

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

上記の表のreg_idINT)は、の値を変更できる列ですmachine_id

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

誰かがその書き込みに助けを私にしてくださいすることができますQUERY/をPROCEDURE

回答:


12

これが役立つことを願って、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で作業する


彼らも必要かもしれませんreg_id = VALUES(reg_id)
ypercubeᵀᴹ

クエリに2つの条件がある場合、キーだけが一意ではないということですか?
サム

11

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

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

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();

そして完了


1
こんにちは、@ Taz、あなたが行った答えを確認できますか?
Craig Efrein

@Craig Efreinこんにちは。私は最初のものと一緒に行きました。あなたの答え。再度、感謝します。
Taz

@Tazこの情報がお役に立てて嬉しいです。この回答で疑問が解消される場合は、質問を閉じてください。
Bill N. Varelli、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.