web-dev-qa-db-fra.com

S'il existe, mettez à jour else insert

J'essaie de créer un STORED PROCEDURE qui sera utilisé pour UPDATE une table appelée machine. Ce tableau comporte trois colonnes (machine_id, machine_name et reg_id).

Dans le tableau susmentionné, reg_id (INT) est une colonne dont les valeurs peuvent être modifiées pour un machine_id.

Je voudrais définir un QUERY/PROCEDURE pour vérifier si un reg_id existe déjà dans cette table. Si c'est le cas, alors UPDATE cette ligne, sinon INSERT une nouvelle ligne.

Quelqu'un peut-il m'aider à écrire ce QUERY/PROCEDURE?

14
Taz

J'espère que cela aide, MISE À JOUR DE LA CLÉ DUPLICATE

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

Travailler sur SQL Fiddle

12
Craig Efrein

Le seul problème est que vous ne pouvez pas l'utiliser comme une requête normale. Les structures de contrôle comme SI ou TANDIS QUE ne sont autorisées que dans les procédures ou fonctions stockées.

Créez simplement une procédure comme celle-ci:

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 ;

et appelez-le comme ceci:

call select_or_insert();

et.. Voila

11
Bill N. Varelli