2015-03-10 1 views
0

Ниже мой SQL запрос, он выдает ошибку: -Создать столбец «Дата» со значением по умолчанию тока даты и времени MYSQL

CREATE TABLE IF NOT EXISTS USER_PROFILE(Id INT PRIMARY KEY AUTO_INCREMENT, date DATETIME NOT NULL DEFAULT NOW) ; 

Это говорит Invalid default value for 'date'.

Я также пробовал синонимы для NOW(), а именно CURRENT_TIMESTAMP, но по-прежнему та же ошибка.

Как создать дату столбца со значением по умолчанию текущего времени?

На странице документации, он говорит, чтобы назначить этот путь

CREATE TABLE t1 (
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    dt DATETIME DEFAULT CURRENT_TIMESTAMP 
); 
+0

Я изменил свой тип в TIMESTAMP, и она работала, но теперь я stucked при создании индекса. Мой запрос: 'CREATE INDEX, ЕСЛИ НЕ СУЩЕСТВУЕТ LINK_INDEX в таблице (url_hash, content_hash, date_)'. Если я выполняю его без 'IF NOT EXISTS', он отлично работает. В чем проблема? – PythonEnthusiast

ответ

1

Из документа

The DEFAULT value clause in a data type specification indicates a default value for a column. With one exception, the default value must be a constant; it cannot be a function or an expression. This means, for example, that you cannot set the default for a date column to be the value of a function such as NOW() or CURRENT_DATE. The exception is that you can specify CURRENT_TIMESTAMP as the default for TIMESTAMP and DATETIME columns

Так функция не допускается значение по умолчанию, поэтому первый запрос не удается.

Снова из документа

As of MySQL 5.6.5, TIMESTAMP and DATETIME columns can be automatically initializated and updated to the current date and time (that is, the current timestamp). Before 5.6.5, this is true only for TIMESTAMP, and for at most one TIMESTAMP column per table. The following notes first describe automatic initialization and updating for MySQL 5.6.5 and up, then the differences for versions preceding 5.6.5.

Before 5.6.5, this is true only for TIMESTAMP 

Так что ваша версия MySQL меньше 5.6.5, следовательно, второй запрос не удается слишком.

Так что вам нужно, чтобы создать таблицу как

CREATE TABLE IF NOT EXISTS 
USER_PROFILE 
(
    Id INT PRIMARY KEY AUTO_INCREMENT, 
    date TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
) ; 
+0

Я изменил свой тип на TIMESTAMP, и это сработало, но теперь я закрепил создание индекса. Мой запрос: 'CREATE INDEX, ЕСЛИ НЕ СУЩЕСТВУЕТ LINK_INDEX в таблице (url_hash, content_hash, date_)'. Если я выполняю его без 'IF NOT EXISTS', он отлично работает. В чем проблема? – PythonEnthusiast

+0

Я обычно делаю как 'alter table table_name add index some_index_name (col1, col2)' вы можете попробовать то же самое. Проверьте документ здесь http://dev.mysql.com/doc/refman/5.6/en/create-index.html 'if not exists' пока не поддерживается –

0

Может быть, ДАТА, как зарезервированное слово, путает его к тому времени, он получает в пункте DEFAULT. Попробуйте другое имя, и если это работает, попробуйте указать «дата».

+0

Я изменил свой тип на TIMESTAMP, и это сработало, но теперь я задумался над созданием индекса. Мой запрос: 'CREATE INDEX, ЕСЛИ НЕ СУЩЕСТВУЕТ LINK_INDEX в таблице (url_hash, content_hash, date_)'. Если я выполняю его без 'IF NOT EXISTS', он отлично работает. В чем проблема? – PythonEnthusiast