powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как правильно хранить время создания и время последнего изменения записи?
10 сообщений из 10, страница 1 из 1
Как правильно хранить время создания и время последнего изменения записи?
    #38938427
lucky89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Вопрос: Как правильно хранить время создания и время последнего изменения записи в одной таблице?
Если создавать таблицу с полями
Код: sql
1.
2.
  `timeCreate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `timeUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,


То ошибка #1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
Если так
Код: sql
1.
2.
`timeCreate` datetime NOT NULL DEFAULT NOW(),
  `timeUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,


То ошибка #1067 - Invalid default value for 'timeCreate'

Я так понимаю NOW() и CURRENT_TIMESTAMP это одно и тоже, так как меняя одно на другое я получал те же ошибки.

Подскажите какие поля нужно создать, чтобы timeCreate сразу по дефолту получал время сервера и больше никогда не менялся, а timeUpdate сразу по дефолту получал время сервера и менялся каждый раз на новое время сервера при обновлении строки?
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938462
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lucky89,

Ты используешь неправильный тип данных.
Вместо timestamp надо использовать datetime.
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938471
lucky89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так?
Код: sql
1.
2.
`timeCreate` datetime NOT NULL DEFAULT NOW(),
`timeUpdate` datetime NOT NULL DEFAULT NOW() ON UPDATE NOW(),


Та же ошибка #1067 - Invalid default value for 'timeCreate'
У datetime в DEFAULT вообще вроде как вообще нельзя NOW() использовать.
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938481
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lucky89Так?
Код: sql
1.
2.
`timeCreate` datetime NOT NULL DEFAULT NOW(),
`timeUpdate` datetime NOT NULL DEFAULT NOW() ON UPDATE NOW(),


Та же ошибка #1067 - Invalid default value for 'timeCreate'
У datetime в DEFAULT вообще вроде как вообще нельзя NOW() использовать.

Ну, это уже другой вопрос...

man create table...
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938485
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lucky89,

Тут вообще почитай про timestamp...
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-overview.html
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938487
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lucky89,

триггер на инсерт и апдейт, в нем и вешаешь NOW() (+ кто-откуда до кучи, тоже модно)
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938660
lucky89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Триггер интересная тема, начал изучать...
Сделал вроде по инструкции:
Код: sql
1.
2.
3.
4.
5.
6.
7.
DELIMITER |
CREATE TRIGGER autoUpdate_timeCreate_in_goods BEFORE INSERT ON goods
  FOR EACH ROW BEGIN
    UPDATE goods SET timeCreate = NOW() WHERE isbn = NEW.isbn;
  END;
|
DELIMITER ;


Ошибка: #1235 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

Конечно со всем этим можно не заморачиваться и просто из php передавать timeCreate = NOW(). Но вот захотелось, чтобы там этой строчки не было, а пусть SQL сервер этим занимается. Мне кажется так правильнее.
Если я это зря придумал, то Вы скажите))

Вообще это какая-то немощная СУБД получается, в которой простым способом нельзя в таблице реализовать столбцы timeCreate и timeUpdate автозаполняемые без получения соответствующих данных из php.
Кстати на старом хостинге прокатывало создание столбцов
Код: sql
1.
2.
timeCreate DATETIME DEFAULT NOW(),
timeUpdate TIMESTAMP,


и работало все само, как часы. вот только на новый хостинг такая таблица не встает по вышеописанным ошибкам
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938744
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lucky89Ошибка: #1235 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'Ну а хотя бы в гуглояндексотранслейт забить - не?
lucky89Та же ошибка #1067 - Invalid default value for 'timeCreate'
У datetime в DEFAULT вообще вроде как вообще нельзя NOW() использовать.Ну вроде как да, нельзя. Даже в доке об этом сказано.
lucky89Кстати на старом хостинге прокатывало создание столбцов
Код: sql
1.
2.
timeCreate DATETIME DEFAULT NOW(),
timeUpdate TIMESTAMP,

Интересно было бы взглянуть на версию.
А вообще http://dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html One TIMESTAMP column in a table can have the current timestamp as the default value for initializing the column, as the auto-update value, or both. It is not possible to have the current timestamp be the default value for one column and the auto-update value for another column.

lucky89Вообще это какая-то немощная СУБД получается, в которой простым способом нельзя в таблице реализовать столбцы timeCreate и timeUpdate автозаполняемые без получения соответствующих данных из php.Триггер - такой уж сложный способ?
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38938802
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lucky89Триггер интересная тема, начал изучать...
Сделал вроде по инструкции:
Код: sql
1.
2.
3.
4.
5.
6.
7.
DELIMITER |
CREATE TRIGGER autoUpdate_timeCreate_in_goods BEFORE INSERT ON goods
  FOR EACH ROW BEGIN
    UPDATE goods SET timeCreate = NOW() WHERE isbn = NEW.isbn;
  END;
|
DELIMITER ;


по каким вы инструкциям делали...
инструкция на офсайте надо было просто переделать под себя
Код: sql
1.
2.
mysql> CREATE TRIGGER autoUpdate_timeCreate_in_goods BEFORE INSERT ON goods
    -> FOR EACH ROW SET NEW.timeCreate = NOW();

понять смысл и сделать ЕЩЕ один на UPDATE
...
Рейтинг: 0 / 0
Как правильно хранить время создания и время последнего изменения записи?
    #38939464
lucky89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторпонять смысл и сделать ЕЩЕ один на UPDATE
Спасибо! Понял, сделал, работает, ура! =)
А зачем еще один на UPDATE делать?
Я сейчас сделал так, в таблице такие колонки:
Код: sql
1.
2.
timeCreate TIMESTAMP NOT NULL DEFAULT 0,
timeUpdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP


И триггер, как вы описали. Работает так, как я задумывал. timeCreate из-за DEFAULT 0 теряет все свойства TIMESTAMP, при INSERT по дефолту получает '00-00-00-...', триггером обновляется до NOW() и при UPDATE никогда не меняется. timeUpdate имеет все свойства TIMESTAMP, при INSERT сразу получает NOW(), при каждом UPDATE снова меняется на NOW().
Есть замечания?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как правильно хранить время создания и время последнего изменения записи?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]