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?

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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.