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.