Dúvida - Qual a melhor forma de preencher campos de created_at e updated_at?
Oi pessoal!
Preciso da opinião de pessoas experientes com bancos de dados.
Qual a melhor forma de preencher campos de created_at e updated_at?
Procurei tirar essa dúvida pesquisando por diversas fontes como Chat-GPT e Google, mas cada uma recomenda uma estrateǵia diferente. Isso é bom, mas como eu não tenho tanta experiência é dificil de chegar em uma conclusão.
Gostaria de ouvir a opnião de vocês.
Chegando um pouco atrasado, mas enfim...
Pra que complicar?
Sério que nenhuma IA te mostrou o mais óbvio e simples? Segue um exemplo em MySQL:
CREATE TABLE TEST (
id INT NOT NULL PRIMARY KEY,
value VARCHAR(10),
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
);
Pronto, sem trigger nem complicações desnecessárias, apenas a definição de colunas com valores default na inserção ou atualização.
No caso, created_at
não pode ser nulo, então se vc não informar um valor no INSERT
, ele usará a data atual. Ou seja, se eu fizer:
INSERT INTO TEST(id, value) VALUES (1, 'abc');
A tabela ficará assim:
id | value | created_at | updated_at |
---|---|---|---|
1 | abc | 2025-04-02 10:56:12 |
Repare que eu não informei o created_at
, então ele assume o valor default, que é a data atual (CURRENT_TIMESTAMP
).
Já updated_at
pode ser nulo, e somente no UPDATE
ele é setado para a data atual.
Ou seja, se seu fizer:
UPDATE test SET value='xyz' WHERE id=1;
Agora a tabela fica assim:
id | value | created_at | updated_at |
---|---|---|---|
1 | xyz | 2025-04-02 10:56:12 | 2025-04-02 11:00:05 |
Repare que o campo updated_at
não foi informado no UPDATE
, sendo assim ele é automaticamente alterado para o valor definido na definição da coluna (que no caso também é a data atual).
E pronto. Outros bancos também possuem este recurso, talvez mude um pouquinho a sintaxe, mas a ideia é a mesma: na própria definição da tabela, informar os valores default para inserção ou atualização. Eu usaria triggers somente se o banco não tivesse tal recurso (alguns possuem somente para inserção, por exemplo), caso contrário estaria complicando à toa (ou, se o sistema for muito simples, setar as datas manualmente mesmo).
Por fim, sobre o uso de IA's: se nenhuma te sugeriu isso, talvez seja porque elas ainda não estão tão boas assim, ou então vc que não soube fazer a pergunta correta (não dá pra saber qual foi, e talvez seja até uma combinação de ambos).
Se não for na camada da aplicação, você pode usar triggers na base de dados. Na camada da aplicação, normalmente os principais ORMs do mercado possuem mecanismos para isso.
Caso não possa contar nem com uma coisa e nem com outra, então precisa ajustar seus SQL para adicionar essa funcionalidade.
Não existe uma resposta suprema em quase nada relacionado a programação. Tudo é um grande depende orientado ao contexto. O seu contexto não ficou claro, no caso seria via aplicação? Se sim, o modo mais cru disso, seria no momento da ação. Se criou o registro preenche o created_at, se editou, preenhe o updated_at... Como ja falaram, alguns frameworks já tratam isso por via do seu ORM.