Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda básica triggers e outros


AndreNix

Pergunta

Olá pessoal, sou novo por aqui.

A situação é a seguinte: Temos 2 bancos de dados com 2.5TB com acervo fotográfico armazenas em BLOB.

Após uma migração de um sistema antigo, alguém bagunçou as tabelas e alguns dados estão duplicados e minha estimativa é de pelo menos 800GB.

Para verificar isso, eu criei uma nova coluna (MD5SUM) nas tabelas e atualizei o hash das imagens para comparações

UPDATE TABELA SET MD5SUM=MD5(IMAGEM);

e depois eu verifico tabela por tabela

select MD5SUM, count(MD5SUM) as MD5

from `TABELA`

group by MD5SUM

having MD5 > 1

order by IMAGEM;

Como estou engatinhando no MySQL, tentei criar um trigger para automatizar a função do UPDATE acima para cada imagem nova armazenada, mas está retonando erro.

INSERT INTO `tmp`.`tmp0` (`IMAGEM`, `ID`, `MD5SUM`) VALUES (_binary 0xFFD8FFE000104A464946000000000/* large SQL query (4,0 MB), snipped at 2.000 characters */

/* SQL Error (1442): Can't update table 'tmp0' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. */

Alguém poderia fazer a gentileza de me ajudar a criar este trigger?

Obs: Como eu posso verificar multiplas tabelas em multiplos bancos simultaneamente para comparar os dados?

desde já, agradeço.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
...

UPDATE TABELA SET MD5SUM=MD5(IMAGEM);

...

Como estou engatinhando no MySQL, tentei criar um trigger para automatizar a função do UPDATE acima para cada imagem nova armazenada, mas está retonando erro.

INSERT INTO `tmp`.`tmp0` (`IMAGEM`, `ID`, `MD5SUM`) VALUES (_binary 0xFFD8FFE000104A464946000000000/* large SQL query (4,0 MB), snipped at 2.000 characters */

/* SQL Error (1442): Can't update table 'tmp0' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. */

...

Obs: Como eu posso verificar multiplas tabelas em multiplos bancos simultaneamente para comparar os dados?

...

Oi André,

Seu objetivo é atualizar automaticamente o campo MD5SUM a cada nova imagem cadastrada?

Link para o comentário
Compartilhar em outros sites

  • 0
Ola Denis,

Sim, a idéia é essa.

Se souber de uma maneira melhor para isso, desde já agradeço.

Andre

Faça assim:

DELIMITER $$;

DROP TRIGGER `meubancodedados`.`nomedotrigger`$$

CREATE TRIGGER `meubancodedados`.`nomedotrigger` BEFORE INSERT on `meubancodedados`.`minhatabela`
FOR EACH ROW BEGIN
  SET NEW.MD5SUM = MD5(NEW.IMAGEM); 
END$$

DELIMITER;$$

Link para o comentário
Compartilhar em outros sites

  • 0
Faça assim:
DELIMITER $$;

DROP TRIGGER `meubancodedados`.`nomedotrigger`$$

CREATE TRIGGER `meubancodedados`.`nomedotrigger` BEFORE INSERT on `meubancodedados`.`minhatabela`
FOR EACH ROW BEGIN
  SET NEW.MD5SUM = MD5(NEW.IMAGEM); 
END$$

DELIMITER;$$

Denis, acabei de testar e funcionou.

Muito obrigado.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...