Si existe, actualice, inserte

14

Estoy tratando de crear un STORED PROCEDUREque se utilizará para UPDATEuna tabla llamada machine. Esta tabla tiene tres columnas ( machine_id, machine_namey reg_id).

En la tabla mencionada anteriormente, reg_id( INT) es una columna cuyos valores se pueden cambiar para a machine_id.

Me gustaría definir un QUERY/ PROCEDUREpara verificar si reg_idya existe en esa tabla. Si lo hace, entonces UPDATEesa fila, de lo contrario, INSERTuna nueva fila.

¿Puede alguien ayudarme a escribir eso QUERY/ PROCEDURE?

Taz
fuente

Respuestas:

12

Espero que esto ayude, 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);

Trabajar en SQL Fiddle

Craig Efrein
fuente
Es posible reg_id = VALUES(reg_id)que también lo necesiten .
ypercubeᵀᴹ
¿Qué pasa si tenemos dos condiciones en la consulta, es decir, no solo la clave es única?
Sam
11

El único problema es que no puede usarlo como una consulta normal. Las estructuras de control como IF o WHILE solo se permiten en procedimientos o funciones almacenados.

Simplemente cree un procedimiento como este:

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 ;

y llámalo así:

call select_or_insert();

y hecho

Bill N. Varelli
fuente
1
Hola @Taz, ¿puedes marcar la respuesta que recibiste?
Craig Efrein
@ Craig Efrein hola. Fui con el primero. Respuesta tuya. Gracias de nuevo.
Taz
@Taz Me alegra que esta información sea útil, por favor, si esta respuesta puede eliminar sus dudas, proceda a cerrar la pregunta.
Bill N. Varelli