Столбец отметки времени

mysql спросил

Изменено 7 лет, 2 месяца назад

Просмотрено 69 тысяч раз

Можно ли определить столбец отметки времени в таблице MySQL, который будет автоматически обновляться каждый раз при изменении поля в той же строке? В идеале этот столбец должен изначально быть установлен на время вставки строки.

Ура, Don

  • mysql
  • timestamp

Вы можете использовать столбец timestamp, как упоминалось в других плакатах. Вот SQL, который вы можете использовать для добавления столбца:

 ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
 

Это добавляет столбец под названием «lastUpdated» со значением по умолчанию текущей даты/времени.

Когда эта запись будет обновлена ​​(скажем, через 5 минут), эта отметка времени автоматически обновится до текущего времени.

1

Это функция по умолчанию для типа столбца timestamp . Однако обратите внимание, что формат этого типа — ггггммддччммсс (все цифры, без двоеточий или других разделителей).

РЕДАКТИРОВАТЬ: Приведенный выше комментарий о формате верен только для версий MySQL < 4.1... Более поздние версии форматируют его как DateTime

1

Это то, что я наблюдал (MySql 5.7.11) —

Первый столбец TIMESTAMP в таблице получает текущую метку времени в качестве значения по умолчанию. Таким образом, если вы выполняете INSERT или UPDATE без указания значения, столбец получит текущую отметку времени.

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

ОШИБКА 1067 (42000): Недопустимое значение по умолчанию для ‘COLUMN_NAME’

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

ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP .
В противном случае оно работает так же, как поле DateTime, только если оно относится к 1970/01/01 UTC, поэтому это абсолютный момент времени, не зависящий от конкретного часового пояса, как DateTime.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

mysql — Какая разница между типами DATE, TIME, DATETIME и TIMESTAMP

спросил

Изменено 4 месяца назад

Просмотрено 209k раз

Мне нужно сохранить как , время

, так и , дату , в файле mysql. Поэтому я использовал для этого функцию NOW() . Но я не знаю, что мне использовать для столбца типа im phpmyadmin. Следует отметить, что NOW() возвращает время и дату следующим образом:

 2014-11-11 12:45:34
 

Вот решение, я могу использовать разделитель для разделения даты и времени ( 2014-11-11 и 12:45:34 ), а затем сохранить их в типе DATE и типе TIME по отдельности. Или я могу использовать тип VARCHAR для хранения их обоих в одном столбце. Но я думаю, что эти способы не являются стандартными. что такое стандартный тип для хранения даты и времени?

Вот мой запрос: (также я не знаю, почему функция СЕЙЧАС() не работает)

 ВСТАВИТЬ В таблицу (дата времени) ЗНАЧЕНИЯ (СЕЙЧАС())
 
  • MySQL
  • SQL
  • дата-время
9

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

DATETIME: Используется для значений, содержащих как дату, так и время. MySQL извлекает и отображает значения DATETIME в формате

ГГГГ-ММ-ДД ЧЧ:ММ:СС . Поддерживаемый диапазон: от 1000-01-01 00:00:00 до 9999-12-31 23:59:59 .

TIMESTAMP: Также используется для значений, содержащих как дату, так и время, а также часовой пояс. TIMESTAMP имеет диапазон 1970-01-01 00:00:01 UTC до 2038-01-19 03:14:07 UTC.

ВРЕМЯ: Его значения представлены в формате ЧЧ:ММ:СС (или ЧЧЧ:ММ:СС для больших значений часов). Значения TIME могут находиться в диапазоне от

-838:59:59 до 838:59:59 . Часть часов может быть такой большой, потому что тип TIME может использоваться не только для представления времени суток (которое должно быть меньше 24 часов), но также прошедшего времени или временного интервала между двумя событиями (которое может быть намного больше, чем 24 часа). 24 часа или даже минус).

10

У меня немного другая точка зрения на разницу между DATETIME и TIMESTAMP . DATETIME хранит буквальное значение даты и времени без привязки к какому-либо конкретному часовому поясу. Итак, я могу установить для столбца

DATETIME значение, например «2019-01-16 12:15:00», чтобы точно указать, когда произошел мой последний день рождения. Это было восточное поясное время? Тихоокеанское стандартное время? Кто знает? Где текущий часовой пояс сеанса сервера вступает в игру, когда вы устанавливаете DATETIME в некоторое значение, например NOW() . Сохраненное значение будет текущей датой и временем с использованием текущего часового пояса сеанса. Но после установки столбца
DATETIME
он будет отображаться одинаково независимо от часового пояса текущего сеанса.

Столбец TIMESTAMP , с другой стороны, принимает значение «2019-01-16 12:15:00», которое вы устанавливаете в него, и интерпретирует его в текущем часовом поясе сеанса для вычисления внутреннего представления относительно 1/1 /1970 00:00:00 UTC. Когда столбец отображается, он будет преобразован обратно для отображения в зависимости от часового пояса текущего сеанса. Полезно думать о TIMESTAMP как о принятии значения, которое вы устанавливаете, и преобразовании его из часового пояса текущего сеанса в UTC для сохранения, а затем обратном преобразовании в часовой пояс текущего сеанса для отображения.

Если мой сервер находится в Сан-Франциско, но я провожу мероприятие в Нью-Йорке, которое начинается 01.09.1029 в 20:00, я бы использовал TIMESTAMP для хранения времени начала, установите часовой пояс сеанса на «Америка/Нью-Йорк» и установите время начала на «2009-09-01 20:00:00». Если я хочу знать, произошло событие или нет, независимо от настройки часового пояса текущего сеанса, я могу сравнить время начала с NOW() . Конечно, для осмысленного отображения потенциальному покупателю I потребуется

установить правильный часовой пояс сеанса. Если бы мне не нужно было сравнивать время, то мне, вероятно, было бы лучше просто использовать DATETIME , который будет отображаться правильно (с подразумеваемым часовым поясом EST) независимо от часового пояса текущего сеанса.

ОГРАНИЧЕНИЕ TIMESTAMP

Тип TIMESTAMP имеет диапазон от ‘1970-01-01 00:00:01’ UTC до ‘2038-01-19 03:14:07’ UTC и так далее это может быть непригодно для вашего конкретного приложения. В этом случае вам придется использовать тип DATETIME . Вы, конечно, всегда должны быть обеспокоены тем, что часовой пояс текущего сеанса установлен правильно всякий раз, когда вы используете этот тип с функциями даты, такими как

СЕЙЧАС() .

9

Сатья описала различия между ними. Для вашей практики вы можете использовать datetime , чтобы сохранить вывод NOW() .

Например:

 СОЗДАТЬ ТАБЛИЦУ Заказы
(
  OrderId int NOT NULL,
  ProductName varchar(50) НЕ NULL,
  OrderDate datetime NOT NULL DEFAULT NOW(),
  ПЕРВИЧНЫЙ КЛЮЧ (OrderId)
)
 

Вы можете прочитать больше на сайте w3schools.

0

В более коротком объяснении

  • ДАТА : ДАТА хранит значение даты в форме ГГГГ-ММ-ДД (год -месяц-день). не хранит время .

  • ВРЕМЯ : ВРЕМЯ хранит значение времени в форме ЧЧ:ММ:СС (часы-минуты-секунды). Не сохраняет дату.

  • ДАТАВРЕМЯ : DATETIME сохраняет значение даты и времени в форме ГГГГ-ММ-ДД ЧЧ:ММ:СС .