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?

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


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.