Довольно прямой вопрос здесь, я думаю, что это должно работать, но это не так. Почему это не так?
CREATE TABLE INVOICE(
INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
Довольно прямой вопрос здесь, я думаю, что это должно работать, но это не так. Почему это не так?
CREATE TABLE INVOICE(
INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
Он не работает, потому что он не поддерживается
В предложении
DEFAULT
указано значение по умолчанию для столбца. За одним исключением значение по умолчанию должно быть константой; это не может быть функцией или выражением. Это означает, например, что вы не можете установить значение по умолчанию для столбца даты как значение функции, напримерNOW()
илиCURRENT_DATE
. Исключением является то, что вы можете указатьCURRENT_TIMESTAMP
как значение по умолчанию для столбцаTIMESTAMP
объявите свой столбец даты NOT NULL, но без значения по умолчанию. Затем добавьте этот триггер:
USE `ddb`;
DELIMITER $$
CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW
if ( isnull(new.query_date) ) then
set new.query_date=curdate();
end if;
$$
delimiter ;
create table the_easy_way(
capture_ts DATETIME DEFAULT CURRENT_TIMESTAMP,
capture_dt DATE AS (DATE(capture_ts))
)
(MySQL 5.7)
Как правильно ответит другой ответ, вы не можете использовать динамические функции в качестве значения по умолчанию. Вы можете использовать TIMESTAMP
с атрибутом CURRENT_TIMESTAMP
, но это не всегда возможно, например, если вы хотите сохранить как создание, так и обновленную временную метку, и вам понадобится только разрешенный столбец TIMESTAMP
для второго.
В этом случае используйте триггер вместо.
Согласно этой документации, начиная с MySQL 8.0.13, вы сможете указать:
CREATE TABLE INVOICE(
INVOICEDATE DATE DEFAULT (CURRENT_DATE)
)
К сожалению, на сегодняшний день эта версия еще не выпущена. Вы можете проверить здесь для последних обновлений.
----- 2016-07-04 MariaDB 10.2.1 - Информация о релизе - -----
Поддержка DEFAULT с выражениями (MDEV-10134).
----- 2018-10-22 8.0.13 Общая доступность - - -----
MySQL теперь поддерживает использование выражений в качестве значений по умолчанию в спецификациях типов данных. Это включает в себя использование выражений в качестве значений по умолчанию для типов данных BLOB, TEXT, GEOMETRY и JSON, которые ранее не могли назначаться значениям по умолчанию вообще. Подробнее см. Тип данных по умолчанию.