mysql - умолчанию - sql default date now




Установите значение NOW() как значение по умолчанию для типа данных datetime? (8)

EUREKA !!!

Для всех тех, кто потерял сердце, пытаясь установить значение DATETIME по умолчанию в MySQL , я точно знаю, как вы себя чувствуете. Итак, вот оно:

`ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0

Внимательно наблюдайте, что я не добавил одиночные кавычки / двойные кавычки вокруг 0 .

Важное обновление :

Этот ответ был опубликован давно. В то время он работал над моей (возможно, последней) установкой MySQL, и мне хотелось поделиться ею. Пожалуйста, прочитайте комментарии ниже, прежде чем вы решите использовать это решение сейчас.

У меня есть два столбца в пользователях таблицы, а именно registerDate and lastVisitDate которые состоят из типа данных datetime. Я хотел бы сделать следующее.

  1. Установите значение по умолчанию для registerDate для MySQL NOW ()
  2. Установите значение lastVisitDate по умолчанию 0000-00-00 00:00:00 Вместо значения null, которое оно использует по умолчанию.

Поскольку таблица уже существует и имеет существующие записи, я бы хотел использовать таблицу Modify. Я попытался использовать два кода ниже, но не работает.

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

Это дает мне ошибку: ERROR 1067 (42000): Invalid default value for 'registerDate'

Возможно ли установить значение datetime по умолчанию для NOW () в MySQL?



Лучшим способом является запуск триггера:

/************ ROLE ************/
drop table if exists `role`;
create table `role` (
    `id_role` bigint(20) unsigned not null auto_increment,
    `date_created` datetime,
    `date_deleted` datetime,
    `name` varchar(35) not null,
    `description` text,
    primary key (`id_role`)
) comment='';

drop trigger if exists `role_date_created`;
create trigger `role_date_created` before insert
    on `role`
    for each row 
    set new.`date_created` = now();

Мое решение

ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP;

Не уверен, что это все еще активно, но здесь.

Что касается установки значений по умолчанию на Now (), я не вижу, чтобы это было возможно для типа данных DATETIME. Если вы хотите использовать этот тип данных, установите дату, когда вы выполняете вставку следующим образом:

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

Моя версия mySQL - это 5.5


Это сработало для меня - просто изменил INSERT на UPDATE для моей таблицы.

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

Я использую триггер в качестве обходного пути для установки поля datetime в NOW () для новых вставок:

CREATE TRIGGER `triggername` BEFORE INSERT ON  `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW()

он должен работать и на обновления

Ответы Johan & Leonardo включают преобразование в поле метки времени. Хотя это, вероятно, хорошо для случая использования, представленного в вопросе (хранения RegisterDate и LastVisitDate), это не универсальное решение. См. Вопрос datetime vs timestamp .


ALTER TABLE table_name
  CHANGE COLUMN date_column_name date_column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

Наконец, это сработало для меня!





mysql-error-1067