S'il existe, mettez à jour else insert

14

J'essaie de créer un STORED PROCEDUREqui sera utilisé pour UPDATEune table appelée machine. Ce tableau comporte trois colonnes ( machine_id, machine_nameet reg_id).

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

Je voudrais définir un QUERY/ PROCEDUREpour vérifier si un reg_idexiste déjà dans cette table. Si c'est le cas, alors UPDATEcette ligne, sinon INSERTune nouvelle ligne.

Quelqu'un peut - il me aider à écrire que QUERY/ PROCEDURE?

Taz
la source

Réponses:

12

J'espère que cela vous aide, 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);

Travailler sur SQL Fiddle

Craig Efrein
la source
Ils peuvent également en avoir besoin reg_id = VALUES(reg_id).
ypercubeᵀᴹ
Et si nous avons deux conditions sur la requête, je veux dire non seulement que la clé est unique?
Sam
11

Le seul problème est que vous ne pouvez pas l'utiliser comme une requête normale. Les structures de contrôle comme IF ou WHILE 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

Bill N. Varelli
la source
1
Bonjour @Taz, pouvez-vous cocher la réponse que vous avez donnée?
Craig Efrein
@Craig Efrein salut. je suis allé avec le premier. Réponse de la vôtre. Merci encore.
Taz
@Taz Je suis heureux que ces informations soient utiles, s'il vous plaît, si cette réponse peut lever vos doutes, passez à la question.
Bill N. Varelli