2014-01-10 6 views
0

~ Similar question ~ w3schools perhaps helpful linkАвтоматически Инициализировать GETDATE() при вставке в MYSQL

~ Проблема: Я вставки строки в базу данных MySQL, и я хочу каждую строку, чтобы иметь колонку, в которой текущая дата (дата, когда строка была вставлен).

~ Покушение решение:

CREATE TABLE $this->DB.$table 
       (
       id int, 
       Report_Date date DEFAULT CURRENT_DATE ON UPDATE CURRENT_DATE)//this fails. 

ли кто-нибудь объяснить, что ON UPDATE означает? Я нервничаю, что, когда у меня есть несколько дней данных, он обновит все значения Report_Date и испортит мои данные. Я думаю, что решение лежит где-то в GETDATE. Кроме того, я не хочу времени, только даты. Очень признателен.

ответ

5
  1. Как указано под CREATE TABLE Syntax (подчеркивание добавлено):

    DEFAULT Предложение задает значение по умолчанию для столбца. За одним исключением значение по умолчанию должно быть константой; это не может быть функцией или выражением. Это означает, например, что вы не можете установить значение по умолчанию для столбца даты как значение функции, например NOW() или CURRENT_DATE. Исключением является то, что вы можете указать CURRENT_TIMESTAMP по умолчанию для TIMESTAMP или (с MySQL 5.6.5) DATETIME. См. Section 11.3.5, “Automatic Initialization and Updating for TIMESTAMP and DATETIME.

    Поэтому ваши варианты:

    • использовать TIMESTAMP колонку (с MySQL v5.6.5, вы можете также использовать DATETIME столбец) и игнорировать часть времени;

    • явно указать текущую дату в команде INSERT:

      INSERT INTO myTable (id, Report_Date) VALUES (123, CURRENT_DATE) 
      
    • определяют BEFORE INSERTtrigger:

      CREATE TRIGGER myTrigger BEFORE INSERT ON myTable FOR EACH ROW 
          SET NEW.Report_Date = IFNULL(NEW.Report_Date, CURRENT_DATE) 
      
  2. ли кто-то объяснить, что ON означает UPDATE?

    Как указано под Automatic Initialization and Updating for TIMESTAMP and DATETIME:

    • В авто-инициализирован столбец устанавливается в текущей временной метки для вставленных строк, которые не задают значения для столбца.

    • Автоматически обновляемый столбец автоматически обновляется до текущей метки времени, когда значение любого другого столбца в строке изменяется от текущего значения. Колонка с автоматическим обновлением остается неизменной, если все остальные столбцы установлены на их текущие значения. Чтобы предотвратить автоматическое обновление столбца от обновления при изменении других столбцов, явно установите его текущее значение. Чтобы обновить автоматически обновляемый столбец, даже если другие столбцы не изменяются, явно установите его значение, которое оно должно иметь (например, установите его на CURRENT_TIMESTAMP).

+0

Так что это прекрасно работает, и это не проблема для меня, чтобы явно указать CURRENT_DATE в операторе вставки. Но я понимаю, что если я правильно создам таблицу, я просто не могу указать значение CURRENT_DATE и когда строка будет создана, она автоматически добавит туда текущую дату. Как мне создать таблицу, чтобы я не упоминал Report_Date или CURRENT_DATE в моей вставке? Это решение полностью решает мою проблему, я просто хочу улучшить свой sql-mojo. –

+1

@ J-Dizzle: вы можете определить триггер для установки значения столбца - см. Мое обновление выше. – eggyal

+0

Сладкий, я ценю множество решений. Я бы ответил +2, если бы мог! - они говорят, что вы не должны сказать «спасибо» в комментариях, но как еще люди узнают, что у меня есть ответ, который мне нужен? Благодаря! –

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