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?

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


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.