Categories: mysql

Trabalhando com triggers (insert, update delete)

Eu utilizava um rotina em php para sincronizar duas tabelas, ela rodava via cron uma vez por hora, porém isso me gerava um certo incômodo, pois as mesmas mensuravam espaço em disco em disco de alguns servidores e as vezes precisava dos dados na hora.

Até que uma hora resolví deixar a preguiça de lado e fazer de uma forma decente, via trigger.

Deixo aqui compartilhado as trigger que criei, aonde podem ser utilizadas como exemplo para after insert, after update e after delete:

After Insert:

DELIMITER $$
CREATE DEFINER=CURRENT_USER TRIGGER sincroniza_backup AFTER INSERT ON tabela_origem
  FOR EACH ROW BEGIN
    INSERT INTO tabela_destino SET
	id 				= NEW.id_servidor,
	nome			= NEW.nome_servidor,
	particao		= NEW.particao,
	tamanho			= NEW.tamanho,
	ocupado			= NEW.ocupado,
	livre			= NEW.livre,
	percentualUso	= NEW.percentual_uso;
  END;
$$
DELIMITER ;

Aqui o parametro NEW, recebe os dados da row afetada pelo insert executado

Para after update:

DELIMITER $$
CREATE DEFINER=CURRENT_USER TRIGGER sincroniza_backup_update AFTER UPDATE ON tabela_origem
  FOR EACH ROW BEGIN
    UPDATE tabela_destino sb SET
	sb.nome			= NEW.nome_servidor,
	sb.ocupado		= NEW.ocupado,
	sb.livre			= NEW.livre,
	sb.percentualUso	= NEW.percentual_uso,
	sb.testeEmail	= NEW.teste_email
	WHERE sb.nome=NEW.nome_servidor AND sb.particao=NEW.particao;
  END;
$$
DELIMITER ;

Mais uma vez o parametro NEW recebe os dados da tabela de origem (as rows afetadas pelo update)

Esse é um pouco diferente, o after delete

DELIMITER $$
CREATE DEFINER=CURRENT_USER TRIGGER sincroniza_backup_delete AFTER DELETE ON servidor_backup
  FOR EACH ROW BEGIN
    DELETE FROM ServidorBackup WHERE
	nome=OLD.nome_servidor AND particao=OLD.particao;
  END;
$$
DELIMITER ;

Nesse caso o valor que as rows deletas continham vão pro OLD

Agora o bonus stage:
Para deletar uma trigger

DROP TRIGGER sincroniza_backup_update;

———————————————-
Posted Listening: “Schools Out – Alice Cooper”

Felipe Braz

Share
Published by
Felipe Braz

Recent Posts

Como Criar Rede Wi-Fi de Visitante em Roteadores Ax3000t com OpenWRT

Depois que comprei os roteadores ax3000t e finalmente consegui instalar o openwrt neles. Agora chegou…

3 meses ago

Como criar e validar credenciais seguras em Ansible sem dor de cabeça – Guia passo a passo

A criação e validação de credenciais seguras em ansible sempre gera um pouco de dor…

2 anos ago

Magento e o mistério do servidor somente-leitura

Dia desses, um dos meus servidores entrou com o sistema de arquivos / em modo…

5 anos ago

Localização de arquivos .desktop no ubuntu

O launcher do ubuntu não fornece muitas opções me relação aos icones, muitas vezes apps…

5 anos ago

Ordenar array por tamanho em php

Três meios diferentes para a mesma finalidade: Usando funções nativas do PHP (recomendado): array_multisort(array_map('strlen', $array),…

6 anos ago

Adicionar suporte a rc.local no ubuntu 16.04 ou superior

Embora um script muito útil para tarefas de inicialização de um servidor, essa funcionalidade se…

6 anos ago