Как установить значение по умолчанию для столбца MySQL Datetime? - PullRequest
822 голосов
/ 04 октября 2008

Как установить значение по умолчанию для столбца MySQL Datetime?

В SQL Server это getdate(). Что является эквивалентом для MySQL? Я использую MySQL 5.x, если это фактор.

Ответы [ 24 ]

7 голосов
/ 25 марта 2011

При определении многострочных триггеров необходимо изменить разделитель, так как точка с запятой будет воспринята компилятором MySQL как конец триггера и выдаст ошибку. например,

DELIMITER //
CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON `MyTable`
FOR EACH ROW BEGIN
        -- Set the udpate date
    Set new.UpdateDate = now();
END//
DELIMITER ;
7 голосов
/ 06 августа 2010

Для всех, кто использует столбец TIMESTAMP в качестве решения, я хочу добавить следующее ограничение из руководства:

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

"Тип данных TIMESTAMP имеет диапазон '1970-01-01 00:00:01' UTC до ' 2038-01-19 03: 14: 07 ' UTC. Он имеет различные свойства , в зависимости от версии MySQL и режима SQL, в котором работает сервер. Эти свойства описаны далее в этом разделе. "

Так что это, очевидно, сломает ваше программное обеспечение примерно через 28 лет.

Я полагаю, что единственным решением на стороне базы данных является использование триггеров, как упомянуто в других ответах.

6 голосов
/ 02 апреля 2016

Я использую MySql Server 5.7.11 и это предложение:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

не работает. Но следующее:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '1000-01-01 00:00:00'

просто работает .

Как sidenote , он упоминается в mysql документах :

Тип DATE используется для значений с частью даты, но без части времени. MySQL извлекает и отображает значения DATE в формате «ГГГГ-ММ-ДД». Поддерживаемый диапазон: от «1000-01-01» до «9999-12-31».

даже если они также говорят:

Недопустимые значения DATE, DATETIME или TIMESTAMP преобразуются в «нулевое» значение соответствующего типа («0000-00-00» или «0000-00-00 00:00:00»).

6 голосов
/ 04 октября 2008

Вы можете использовать now () для установки значения столбца datetime, но имейте в виду, что вы не можете использовать его в качестве значения по умолчанию.

5 голосов
/ 26 ноября 2011

Хотя вы не можете сделать это с помощью DATETIME в определении по умолчанию, вы можете просто включить оператор выбора в оператор вставки, например так:

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

Обратите внимание на отсутствие кавычек вокруг стола.

Для MySQL 5.5

4 голосов
/ 14 января 2012

Вот как это сделать на MySQL 5.1:

ALTER TABLE `table_name` CHANGE `column_name` `column_name` 
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

Понятия не имею, зачем вводить имя столбца дважды.

3 голосов
/ 04 октября 2008

Если вы пытаетесь установить значение по умолчанию как NOW (), я не думаю, что MySQL поддерживает это. В MySQL нельзя использовать функцию или выражение в качестве значения по умолчанию для любого типа столбца, за исключением столбца типа данных TIMESTAMP, для которого вы можете указать CURRENT_TIMESTAMP в качестве значения по умолчанию.

2 голосов
/ 26 июля 2018

Я думаю, что это просто в mysql, поскольку mysql - встроенная функция, которая вызывается now (), которая дает текущее время (время этой вставки).

Таким образом, ваш запрос должен выглядеть аналогично

CREATE TABLE defaultforTime(
    `creation_time`     DATETIME DEFAULT CURRENT_TIMESTAMP,
    `modification_time` DATETIME default now()
);

Спасибо.

2 голосов
/ 19 сентября 2016

Используйте следующий код

DELIMITER $$

    CREATE TRIGGER bu_table1_each BEFORE UPDATE ON table1 FOR EACH ROW
    BEGIN
      SET new.datefield = NOW();
    END $$

    DELIMITER ;
2 голосов
/ 12 декабря 2012
CREATE TABLE `testtable` (
    `id` INT(10) NULL DEFAULT NULL,
    `colname` DATETIME NULL DEFAULT '1999-12-12 12:12:12'
)

В приведенном выше запросе для создания 'testtable' я использовал '1999-12-12 12:12:12' в качестве значения по умолчанию для столбца DATETIME colname

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...