Duvida IF Exist mysql

13 respostas
T

Estou criando um sistema, estou com uma duvida sobre criar uma sql
a situação é o seguinte.

quero fazer um select de uma tabela.
Se existir fazer um update
Senão fazer um insert.

procurei na internet muita coisa sobre IF EXIST UPDATE ELSE INSERT
nao consegui compilar nada, sempre erro de sintaxe.

13 Respostas

drsmachado

Será preciso realizar uma consulta prévia e depois o update ou insert.

CristianPalmaSola10

bom para resolver voce pode fazer o seguinte

select count(*) from tabela

se o valor retornado for maior que 0 é so fazer update se for 0 ai tem que fazer insert muito simples

drsmachado

CristianPalmaSola10:
bom para resolver voce pode fazer o seguinte

select count(*) from tabela

se o valor retornado for maior que 0 é so fazer update se for 0 ai tem que fazer insert muito simples


Ainda assim precisará fazer uma consulta prévia.
Ou criar uma stored procedure.

CristianPalmaSola10

Sim, mas eu naum disse que não iria precisar. e naum vejo problema nenhum em fazer assim…

drsmachado

Com certeza.
Porém, se ele tiver acesso e conhecimento, pode fazer com stored procedure.

Fabiano_Abreu

Ola thaffa,

Siga a dica dos colegas acima, caso não consiga, poste o código, bem como também o erro.

A sintaxe é mais ou menos assim:

if exists(SEU SELECT) then begin SEU UPDATE end; else begin SEU INSERT end; end if;

Abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

T

Sim ja havia tentado assim, mas da erro

if exists(SELECT * from estoque where Produto_idProduto = 1 AND Validade = "2012-10-30") then begin UPDATE estoque SET Quantidade=50 Where Produto_idProduto = 1 end; else begin INSERT INTO estoque(Produto_idProduto, Validade, Quantidade) VALUES (5,"2012-11-30",10) end; end if; ;

erro: Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘if exists(SELECT * from estoque where Produto_idProduto = 1 AND Validade = "2012’ at line 1
(0 ms taken)

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘else
begin
INSERT INTO estoque(Produto_idProduto, Validade, Quantida’ at line 1
(0 ms taken)

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘end if’ at line 1
(0 ms taken)

Nota to usando mysql 6,0

JuniorMaia

mesmo que existisse uma função “pronta”, o SQL teria que varrer a tabela, nada mais simples que fazer isso manualmente. Eu uso isso em tabelas pequenas sem indices para verificar a existência de dados ambiguos em atributos que não são primários…

Fabiano_Abreu

Visualmente vejo a falta do ponto e vírgula no final das instruções update e insert. Outra coisa também que não causa o erro, mas uso de forma diferente é o uso de aspas simples nas datas.

Veja se não é isto.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

T

mesmo com os ;
da erro,

ta no caso vou ter que fazer a consulta no programa
comparar no programa
e depois mandar inserir ou dar update?

nossa tres instruções onde poderia ter apenas uma.

com store procedure como ficaria?

Fabiano_Abreu

thaffa,

Você esta executando a instrução diretamente no banco? Caso sim, não vai funcionar mesmo não, precisa que esteja em uma sp, como já foi pontuado pelos colegas acima.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

T

a ta que burro eu fui. AEHIEAUHAE fiz uma stored procedure aki e compilou

DELIMITER $$

DROP PROCEDURE IF EXISTS `saveestoque`.`EstoqueEntrada`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `EstoqueEntrada`()
begin
    if exists(SELECT * from estoque where Produto_idProduto = 1 AND Validade = "2012-10-30") then    
   begin    
     UPDATE estoque SET Quantidade=10 Where Produto_idProduto = 1  ;
   end;    
else    
   begin    
     INSERT INTO estoque(Produto_idProduto, Validade, Quantidade) VALUES (5,"2012-11-30",10)  ;
   end;    
end if;   
  end$$

DELIMITER ;

agora soh vou modificar pra entrada dos dados =) valeu galera

Fabiano_Abreu

Aeee,

Valeu pelo retorno, abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

Criado 19 de setembro de 2012
Ultima resposta 19 de set. de 2012
Respostas 13
Participantes 5