2011-01-07 2 views
1

У меня есть стол, где мне нужны как firstmod, так и lastmodMySQL, таблица с двумя датами?

firstmod должен быть отметкой времени, после чего строка была создана. lastmod должен обновить свое «я» до текущего времени.

Это то, что я до сих пор ..

CREATE TABLE IF NOT EXISTS `SiteGen_JamesM_Live`.`PAGES` (
    `ID` INT(11) NOT NULL AUTO_INCREMENT , 
    `USER_ID` INT(11) NOT NULL , 
    `TITLE` VARCHAR(100) NOT NULL , 
    `HTML` LONGTEXT NOT NULL , 
    `FIRSTMOD` TIMESTAMP NOT NULL DEFAULT 0 , 
    `LASTMOD` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , 
    PRIMARY KEY (`ID`)) 
ENGINE = InnoDB 
AUTO_INCREMENT = 5 
DEFAULT CHARACTER SET = latin1 

И это то, что я получаю в ответ:

Executing SQL script in server 
ERROR: Error 1067: Invalid default value for 'FIRSTMOD' 
+0

Я не знаю метода, который предлагает Павел, но я сомневаюсь, что он сработает. '0000-00-00 00:00:00' не является допустимым значением по умолчанию для метки времени (начиная с '1970-01-01 00:00:00'). Вместо этого вы можете попробовать использовать 0, но он просто ничего не сделает. – Mchl

+0

treid zero wont, work ?! –

+0

Возможно из-за этого: http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_allow_invalid_dates Я все еще думаю, что это не сработает. – Mchl

ответ

0

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

Я предполагаю, что LastMod столбец должен быть определен:

`LASTMOD` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP , 

без DEFAULT указать. Это значение по умолчанию произойдет через предложение ON UPDATE.

EDIT:

К сожалению, не должен рисковать эти вещи. Из инструкции:

Это не возможно иметь текущего времени будет значение по умолчанию для одного столбца и автоматического обновления значения для другого столбца.

+0

Спасибо, не сработал и запутался .. я бы добавил +1 для попытки, если зарегистрировался. :) –

+0

редактирование в вопросе! –

+0

Страницы MySQL man отображают DEFAULT 0 как правильное использование и требуют наличия флага, допускающего 0 дат в базе данных. Кроме того, вы можете использовать настоящую дату. –

0

В таблице может быть только одна колонка с CURRENT_TIMESTAMP. Вы должны выбрать, будет ли он с DEFAULT (на вставке) или один с ON UPDATE (или вы можете иметь оба модификатора, но в одном столбце).

Существует трюк, чтобы иметь оба, но поскольку он недокументирован, он также ненадежен (на самом деле я не уверен, что он все еще работает).

Подробнее здесь: http://dev.mysql.com/doc/refman/5.5/en/timestamp.html

Для одного столбца TIMESTAMP в таблице, можно назначить текущую метку времени в качестве значения по умолчанию и значение автоматического обновления . Возможно, что имеет текущую временную метку для значения по умолчанию для инициализации столбца для значения автоматического обновления или . Это не возможно, чтобы иметь текущего времени будет значение по умолчанию для одного столбца и автоматического обновления значение для другого столбца

В качестве обходного пути, вы можете использовать ДО INSERT или ДО триггера UPDATE, чтобы установить одно из этих значений.

+0

исправления в вопросе! –

0

Попробуйте это:

`FIRSTMOD` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' , 
`LASTMOD` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , 

, а затем в ваших вставок

INSERT INTO PAGES (FIRSTMOD, LASTMOD) VALUES (NULL, NULL) 

Столбец FIRSTMOD должны получить действительную метку времени вставки и LASTMOD необходимо обновить авто после этого.

+0

хорошо, но будет первым модом включить правильный timedate? –

+0

Редакции в вопросе! –

+0

Да, должно. Есть куча полезных комментариев по адресу http://dev.mysql.com/doc/refman/5.0/en/timestamp.html, а также некоторые альтернативные предложения, в том числе использование триггеров для выполнения обновлений (что немного больше работы для установки, но затем не требуется передавать NULL этим полям в INSERT). –

0

попробовать это

CREATE TABLE IF NOT EXISTS `PAGES` (
    `ID` INT(11) NOT NULL AUTO_INCREMENT , 
    `USER_ID` INT(11) NOT NULL , 
    `TITLE` VARCHAR(100) NOT NULL , 
    `HTML` LONGTEXT NOT NULL , 
    `FIRSTMOD` datetime NOT NULL, 
    `LASTMOD` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , 
    PRIMARY KEY (`ID`)) 
ENGINE = InnoDB 
AUTO_INCREMENT = 5 
DEFAULT CHARACTER SET = latin1 

и настроить триггер для обновления FIRSTMOD на вставке

Create Trigger Insert_PAGES 
    After INSERT On PAGES 
    For Each Row 
    Begin 
    set new.FIRSTMOD = now(); 
    End 

Это установит время firstmod = сейчас(), когда создается запись и lastmod обновит свое «я» до текущего времени, когда будут внесены изменения в запись

 Смежные вопросы

  • Нет связанных вопросов^_^