Eae gente bonita, tudo bem com vocês? Depois de um bom tempo sem escrever aqui resolvi voltar e trazer um pouco mais da minha trilha de estudos para vocês e a bola da vez é o SQL. Existem alguns termos e siglas que nós vemos com frequência, até mesmo usamos e muitas vezes não sabemos exatamente o que é, então separei alguns e vou trazer aqui para vocês nas próximas semanas. Sugestões de temas são sempre bem-vindas!
Bom como é de costume gosto sempre de passar pelo que é, para que serve e como esse é o meu primeiro post sobre SQL, eu vou dar uma breve introdução a sigla e depois trago um post mais detalhado sobre o assunto.
O que é SQL?
SQL = Structured Query Language é uma linguagem usada pelos bancos de dados para criação, modelagem e estruturação de banco de dados e também para manipulação dos dados dentro do banco. Sempre que ler ou ouvir o termo "banco sql" se refere a um banco que usa essa linguagem como padrão, apesar de em alguns casos os bancos terem algumas especifidades. Quando ler sobre bancos NoSQL, são bancos que NÃO usam a linguagem SQL por padrão como um MongoDB por exemplo.
Trigger
O que é
Trigger ou com uma tradução livre e direta "gatilho", são funções SQL que são pré programadas e executadas de acordo com uma alteração no banco de dados seja uma alteração de DML (Data Manipulation Language) ou DDL (Data Definition Language), sendo mais direto, você pode criar uma trigger que será executada antes ou depois de um INSERT, DELETE, TRUNCATE e UPDATE que são alterações nos dados do banco, como também pode fazer o mesmo para alterações na estrutura do banco de dados como em CREATE, ALTER e DROP
Na prática
Bom antes de mostrar o exemplo primeiro é importante deixar claro algumas coisas, o banco que usarei aqui será o PostgreSQL, ele cria a suas triggers de uma forma um pouco diferente dos demais bancos mas nada para se preocupar.
O nosso banco:
Mãos a obra!
Primeiros nós vamos criar a função que será executada na trigger. Essa função é bem simples era irá adicionar a data de criação na coluna createdAt para cada usuário que for inserido na tabela.
É importante deixar claro que para esse tipo de caso existem formas MUITO mais simples e melhores de se fazer esse tipo de operação, mas para caso de estudo vamos seguir dessa forma.
CREATE OR REPLACE FUNCTION setData()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
BEGIN
update users set created_at = now() where id = new.id;
RETURN NEW;
END;
$$
O que essa função faz? Bom basicamente ela atualiza a coluna created_at com a data do momento que está sendo executada.
Agora com a nossa função criada nós vamos associa-la a um trigger
create trigger setDataOnInsert
after
insert
on
users
for each row
execute procedure setData();
O que esse codigo faz? Basicamente aqui nós estamos criando o trigger, ele será executa APÓS - AFTER um INSERT na tabela USERS (ON USERS) para cada linha inserida.
Agora vamos testar, basta rodar um insert, que a trigger será ativada
insert into users(name, email) values ('Cristian', 'cristian123122@email.com')
Agora vamos consultar e verificar se deu tudo certo.
Agora podemos filtrar ou apenas dar um select em todos os dados da base e veremos que o último registro inserido está com a coluna create_at preenchida
Espero ter ajudado, caso tenha alguma duvida fique a vontade para comentar!
Se chegou até aqui, me segue la nas redes vizinhas.