Wenn vorhanden, dann aktualisieren, sonst einfügen

13

Ich versuche eine zu erstellen STORED PROCEDURE, die an UPDATEeine Tabelle namens verwendet wird machine. Diese Tabelle enthält drei Spalten ( machine_id, machine_nameund reg_id).

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

Ich möchte ein QUERY/ definieren, um PROCEDUREzu überprüfen, ob reg_idin dieser Tabelle bereits ein vorhanden ist. Wenn ja, dann UPDATEdiese Zeile, sonst INSERTeine neue Zeile.

Kann mir bitte jemand helfen , dass schreiben QUERY/ PROCEDURE?

Taz
quelle

Antworten:

12

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);

Arbeiten Sie an SQL Fiddle

Craig Efrein
quelle
Sie können auch brauchen reg_id = VALUES(reg_id).
Ypercubeᵀᴹ
Was ist, wenn wir zwei Bedingungen für die Abfrage haben? Ich meine, nicht nur der Schlüssel ist eindeutig.
Sam
11

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

Bill N. Varelli
quelle
1
Hallo @Taz, kannst du die Antwort abhaken, mit der du gegangen bist?
Craig Efrein
@Craig Efrein hi. Ich ging mit dem ersten. Antwort von dir. Danke noch einmal.
Taz
@Taz Ich bin froh, dass diese Informationen hilfreich sind. Wenn diese Antwort Ihre Zweifel beseitigen könnte, schließen Sie die Frage.
Bill N. Varelli