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.