it-swarm.com.de

Wenn vorhanden, dann aktualisieren, sonst einfügen

Ich versuche, einen STORED PROCEDURE Zu erstellen, der verwendet wird, um UPDATE eine Tabelle mit dem Namen machine zu erstellen. Diese Tabelle enthält drei Spalten (machine_id, machine_name Und reg_id).

In der oben genannten Tabelle ist reg_id (INT) eine Spalte, deren Werte für einen machine_id Geändert werden können.

Ich möchte ein QUERY/PROCEDURE definieren, um zu überprüfen, ob in dieser Tabelle bereits ein reg_id Vorhanden ist. Wenn ja, dann UPDATE diese Zeile, andernfalls INSERT eine neue Zeile.

Kann mir bitte jemand helfen, das QUERY/PROCEDURE zu schreiben?

14
Taz

Hoffe das hilft, 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);

Arbeite an SQL Fiddle

12
Craig Efrein

Das einzige Problem ist, dass Sie es nicht wie eine normale Abfrage verwenden können. Kontrollstrukturen wie IF oder WHILE sind nur in gespeicherten Prozeduren oder Funktionen zulässig.

Erstellen Sie einfach eine Prozedur wie folgt:

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 ;

und nenne es so:

call select_or_insert();

und fertig

11
Bill N. Varelli