GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Mysql coluna DATE com valor padrão NOW()

banco
Tags: #<Tag:0x00007fbf1b6ce738>

#1

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?


#2

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;


#3

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.


#4

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


#5

Valeu pela ajuda.


#6

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…


#7

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…


#8

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


#9

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…


#10

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

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


#11

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


#12

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


#14

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


#15

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…


#16

Sim, mesmo mudando, o erro persiste.


#17

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.


#18

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…


#19

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


#20

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…


#21

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?