Mysql coluna DATE com valor padrão NOW()

Olá. Eu gostaria de fazer exatamente o que disse no título, queria que quando o usuário não inserisse a data, o sistema colocasse NOW() no campo, porém o MYSQL não está aceitando:

Alguém conhece uma maneira de fazer isso?

Antes de Tudo:
Tenta NOW() Maiúsculo
Adapta a sua necessidade ai …

O que você precisa fazer eh definir um valor default ao criar a tabela:
Exemplo:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT ‘Sandnes’
)

ou Triggers:
Exemplo:

CREATE TABLE MyTable (
MyTable_ID int UNSIGNED NOT NULL AUTO_INCREMENT ,
MyData varchar(10) NOT NULL ,
CreationDate datetime NULL ,
UpdateDate datetime NULL ,
PRIMARY KEY (MyTable_ID)
)
;

CREATE TRIGGER MyTable_INSERT BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
– Set the creation date
SET new.CreationDate = now();

-- Set the udpate date

Set new.UpdateDate = now();
END;

CREATE TRIGGER MyTable_UPDATE BEFORE UPDATE ON MyTable
FOR EACH ROW BEGIN
– Set the udpate date
Set new.UpdateDate = now();
END;

1 curtida

Dá na mesma.[quote=“Frmichetti, post:2, topic:344225”]
CREATE TRIGGER MyTable_INSERT BEFORE INSERT ON MyTableFOR EACH ROW BEGIN – Set the creation dateSET new.CreationDate = now();

– Set the udpate date

Set new.UpdateDate = now();END;

CREATE TRIGGER MyTable_UPDATE BEFORE UPDATE ON MyTableFOR EACH ROW BEGIN – Set the udpate dateSet new.UpdateDate = now();END;
[/quote]

Sua ideia funciona e é interessante, mas qual é o problema com DEFAULT NOW()? Não vejo nenhum problema de sintaxe aí.
Mas de qualquer forma, já implementei no meu projeto sua ideia, valeu.

NOW() é uma função, logo ela não pode ser usada como valor padrão, ao invés use o CURRENT_TIMESTAMP

1 curtida

Valeu pela ajuda.

1 curtida

A idéia da trigger é válida, mas pensando no futuro, use trigger somente se necessário, pois a medida que a tabela cresce, pode afetar o desempenho…

2 curtidas

Bom beleza , contornou o problema.

Mas tentando entender o motivo…

Está utilizando MySQL WorkBench (pelo Print parece que sim…)?

Depois a título de Curiosidade: execute esses scripts:

DROP DATABASE IF EXISTS test;

CREATE DATABASE IF NOT EXISTS test;

use test;

DROP TABLE IF EXISTS Persons;

CREATE TABLE IF NOT EXISTS Persons
(

P_Id int KEY AUTO_INCREMENT NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255) DEFAULT 'Sandnes',

DateAndTime DATETIME Default NOW()

);

Até aqui deve executar normalmente.


Teste 1:

Depois:

SELECT * FROM test.Persons;

Tudo deve ser listado normalmente.

Recaptulando:
P_ID = auto Increment INT
DateAndTime = Default TImestamp frow NOW()

Dai eu vou com cuidado entre as celular e aponto o mouse e digito apenas nos campos que são necessários:
(Repare que os Campos P_ID e DateAndTime estão com um ‘Flagzinho Null’)

E agora ao fazer um Apply :

Sucesso.


Teste 2:

Agora eu Sem Tomar cuidado fui la e cliquei sem Querer na primeira Célula ID preenchi todas as outras e no Time And Date Deixei Vazio: Repare que o Tagzinho null Sumiu.

Olha o Script gerado:

Olha o Erro:

AI eu fui insistir:

Repare o Script:

Crash Again:

Moral da Historia.

Não é você ou a sua sintaxe que está errada.
Apesar da interface tornar mais fáceis as operações parece que ela não está realizando algumas coisas direito:
Penso que seja esse o motivo de não ter funcionado ai.
Realize esses testes … verifique se não é a ferramenta q está gerando confusão…

Okay, vou substituir o trigger pela outra solução.

Não me interprete mal, trigger tem sua utilidade, mas para essa situação creio não ser necessária… é apenas uma questão de “o mais adequado” para esse caso…

Eu estava utilizando o HeidSql naquele momento, porém o mesmo erro ocorre no Workbench:

ALTER TABLE eventos MODIFY COLUMN inicia DATE default NOW();

Bem, demorou um pouquinho porque eu acabei me esquecendo, mas olha só o que eu estou recebendo aqui agora:

E quando eu tento alterar o valor do campo manualmente para NOW(), eu recebo essa mensagem:

Troque sua coluna para DATETIME ou TIMESTAMP e veja se o erro persiste…

Esse código de erro 1442 tem haver com sua trigger, procure pesquisar sobre esses códigos, é a forma que a base te informa dos erros ocorridos…

Não faz sentido manter a trigger e o valor default no campo, você terá de escolher entre um ou outro…

Sim, mesmo mudando, o erro persiste.

O problema é que eu já removi os dois triggers a muito tempo. Pesquisar foi a primeira coisa que eu fiz, porém eu realmente não entendo o porquê de eu estar recebendo esse erro.

O mysql costuma apresentar alguns problemas de estrutura, pesquise sobre recover table ou manutenção de tabelas…

as vezes algumas regras ficam desajustadas no banco, ocasionando erros esquisitos…

Isso seria tipo um reset? Posso perder dados? A estrutura da minha tabela vai mudar?

Não necessariamente, são ferramentas que auxiliam identificar problemas na estrutura.

Quanto a perda de dados, faça backup por garantia, mas alguns comandos não afetam os dados, apenas a estrutura…

1 curtida

Vou pesquisar sobre isso, quando descobrir, te dou uma resposta. Mas isso resolveria o meu problema da foto que eu mandei, que não é possível inserir a data no campo, porém o valor padrão eu não resolvi ainda, pois nenhuma das alternativas funcionaram exceto o trigger. Não existe alguma outra variável que sirva para isso?