Jika ada, perbarui sisipan lain

14

Saya mencoba membuat STORED PROCEDUREyang akan digunakan untuk UPDATEtabel yang disebut machine. Tabel ini memiliki tiga kolom ( machine_id, machine_namedan reg_id).

Dalam tabel tersebut, reg_id( INT) adalah kolom yang nilainya dapat diubah untuk a machine_id.

Saya ingin mendefinisikan QUERY/ PROCEDUREuntuk memeriksa apakah reg_idsudah ada dalam tabel itu. Jika ya, maka UPDATEbaris itu, atau INSERTbaris baru.

Dapatkah seseorang silahkan membantu saya untuk menulis bahwa QUERY/ PROCEDURE?

Taz
sumber

Jawaban:

12

Semoga ini bisa membantu, DUPLICATE UPDATE KEY

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

Bekerja pada SQL Fiddle

Craig Efrein
sumber
Mereka mungkin perlu reg_id = VALUES(reg_id)juga.
ypercubeᵀᴹ
bagaimana jika kita memiliki dua syarat dalam permintaan, maksud saya bukan hanya kunci yang unik?
Sam
11

Satu-satunya masalah adalah, Anda tidak dapat menggunakannya seperti permintaan normal. Struktur kontrol seperti IF atau WHILE hanya diperbolehkan dalam prosedur atau fungsi yang tersimpan.

Cukup buat prosedur seperti ini:

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 ;

dan menyebutnya seperti ini:

call select_or_insert();

dan Selesai

Bill N. Varelli
sumber
1
Halo @Taz, bisakah kamu memeriksa jawaban yang kamu terima?
Craig Efrein
@Craig Efrein hai. saya pergi dengan yang pertama. Jawaban Anda. Terima kasih lagi.
Taz
@Taz Saya senang bahwa informasi ini bermanfaat, silakan jika jawaban ini dapat menghapus keraguan Anda, lanjutkan untuk menutup pertanyaan.
Bill N. Varelli