Jeśli istnieje, to zaktualizuj inny insert

14

Próbuję utworzyć taki, STORED PROCEDUREktóry będzie przyzwyczajony do UPDATEtabeli o nazwie machine. Ta tabela ma trzy kolumny ( machine_id, machine_namei reg_id).

W powyższej tabeli reg_id( INT) jest kolumną, której wartości można zmienić dla machine_id.

Chciałbym zdefiniować QUERY/, PROCEDUREaby sprawdzić, czy reg_idjuż istnieje w tej tabeli. Jeśli tak, to UPDATEten wiersz, w przeciwnym razie INSERTnowy wiersz.

Czy ktoś może mi pomóc napisać to QUERY/ PROCEDURE?

Taz
źródło

Odpowiedzi:

12

Mam nadzieję, że to pomaga, 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);

Pracuj na SQL Fiddle

Craig Efrein
źródło
Mogą również potrzebować reg_id = VALUES(reg_id).
ypercubeᵀᴹ
co jeśli mamy dwa warunki zapytania, to znaczy, że nie tylko klucz jest unikalny?
Sam
11

Jedynym problemem jest to, że nie można go używać jak zwykłego zapytania. Struktury kontrolne, takie jak IF lub WHILE, są dozwolone tylko w procedurach przechowywanych lub funkcjach.

Po prostu utwórz następującą procedurę:

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 ;

i nazwij to tak:

call select_or_insert();

i zrobione

Bill N. Varelli
źródło
1
Witaj @Taz, czy możesz sprawdzić odpowiedź, z którą poszedłeś?
Craig Efrein
@Craig Efrein cześć. poszedłem z pierwszym. Twoja odpowiedź. Dzięki jeszcze raz.
Taz
@Taz Cieszę się, że te informacje są pomocne, jeśli ta odpowiedź może usunąć wątpliwości, przejdź do zamknięcia pytania.
Bill N. Varelli