Varsa, başka eki güncelleyin


14

Ben denilen bir tabloya STORED PROCEDUREkullanılacak bir oluşturmaya çalışıyorum . Bu tablonun üç sütunu ( , ve ) vardır.UPDATEmachinemachine_idmachine_namereg_id

Yukarıda belirtilen tabloda, reg_id( INT) değerleri a için değiştirilebilen bir sütundur machine_id.

Bu tabloda zaten var olup olmadığını kontrol etmek için QUERY/ tanımlamak istiyorum . Varsa, o satır, aksi takdirde yeni bir satır.PROCEDUREreg_idUPDATEINSERT

Birisi o yazmak için yardıma bana Lütfen artık QUERY/ PROCEDURE?

Yanıtlar:


12

Umarım bu yardımcı olur, 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 üzerinde çalışın


Onlar da gerekebilir reg_id = VALUES(reg_id).
ypercubeᵀᴹ

sorguda iki koşulumuz varsa, sadece anahtar benzersiz değil demek istiyorum?
Sam

11

Tek sorun, normal bir sorgu gibi kullanamazsınız. IF veya WHILE gibi kontrol yapılarına yalnızca saklı yordamlarda veya işlevlerde izin verilir.

Sadece böyle bir prosedür oluşturun:

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 ;

ve şöyle deyin:

call select_or_insert();

ve bitti


1
Merhaba @Taz, gittiğin cevabı kontrol edebilir misin?
Craig Efrein

@Craig Efrein merhaba. birincisi ile gittim. Cevabınız. Tekrar teşekkürler.
Taz

@Taz Bu bilgilerin yararlı olduğuna sevindim, lütfen bu cevap şüphelerinizi kaldırabilirse soruyu kapatmaya devam edin.
Bill N. Varelli
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.