Se existir, atualize ou insira

14

Estou tentando criar um STORED PROCEDUREque será usado para UPDATEuma tabela chamada machine. Esta tabela possui três colunas ( machine_id, machine_namee reg_id).

Na tabela mencionada acima, reg_id( INT) é uma coluna cujos valores podem ser alterados para a machine_id.

Eu gostaria de definir um QUERY/ PROCEDUREpara verificar se reg_idjá existe nessa tabela. Se isso acontecer, então UPDATEessa linha, caso contrário, INSERTuma nova linha.

Alguém por favor pode me ajudar a escrever isso QUERY/ PROCEDURE?

Taz
fonte

Respostas:

12

Espero que isso ajude, DUPLICAR A ATUALIZAÇÃO CHAVE

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

Trabalhar no SQL Fiddle

Craig Efrein
fonte
Eles podem precisar reg_id = VALUES(reg_id)também.
usar o seguinte comando
e se tivermos duas condições na consulta, quero dizer que não apenas a chave é única?
21418 Sam
11

O único problema é que você não pode usá-lo como uma consulta normal. Estruturas de controle como IF ou WHILE são permitidas apenas em procedimentos ou funções armazenadas.

Basta criar um procedimento como este:

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 ;

e chame assim:

call select_or_insert();

E feito

Bill N. Varelli
fonte
11
Olá @Taz, você pode marcar a resposta com a qual foi?
Craig Efrein
@Craig Efrein hi. Eu fui com o primeiro. Resposta sua. Obrigado novamente.
Taz
@ Taz Fico feliz que esta informação seja útil, por favor, se esta resposta puder remover suas dúvidas, prossiga para encerrar a pergunta.
Bill N. Varelli