Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
два TIMESTAMP-а в MySQL 5.0 (Dinky) 07/11/2005 - 21:15:57
      Re: два TIMESTAMP-а в MySQL 5.0 (Artemeey) 15/11/2010 - 09:42:58
      Re: два TIMESTAMP-а в MySQL 5.0 (CrazyTimon) 24/05/2012 - 11:46:47

> Original message text:
> From: Dinky - 07/11/2005 - 21:15:57
> Subject:два TIMESTAMP-а в MySQL 5.0
> -----------------
> http://www.futhark.ch/mysql/108.html
> в моем вольном переводе с сокращениями:
> ================================================
> В MySQL 4.1 появилась возможность контролировать поведение полей TIMESTAMP - обновление только на UPDATE или на INSERT или на оба сразу, но в MySQL 5.0 можно добиться бОльшего с применением триггеров.
> Вот, к примеру, хотелось бы сделать так:
> CREATE TABLE blog_entries (
> `published` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
> `updated` TIMESTAMP DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
> `title` VARCHAR(128)
> );
> Но это не будет работать в MySQL 5.0:
> ERROR 1293 (HY000): Incorrect table definition; there can be only one
> TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
> Вместо этого можно пойти другим путем:
>
> 1) создаем таблицу:
> CREATE TABLE blog_entries (
> `published` TIMESTAMP DEFAULT '0000-00-00 00:00:00',
> `updated` TIMESTAMP DEFAULT '0000-00-00 00:00:00',
> `title` VARCHAR(128)
> );
> заметим, что MySQL не будет автоматически обновлять эти поля
>
> 2) пишем два триггера - на вставку и обновление:
> CREATE TRIGGER blog_entries_publish BEFORE INSERT ON `blog_entries`
> FOR EACH ROW SET NEW.published = NOW(), NEW.updated = '0000-00-00 00:00:00';
> CREATE TRIGGER blog_entries_update BEFORE UPDATE ON `blog_entries`
> FOR EACH ROW SET NEW.updated = NOW(), NEW.published = OLD.published;
>
> Будет работать, но нельзя будет задать значения этих полей в запросах - триггеры все перепишут по-своему. Если необходимо иметь такую более гибкую функциональность:
>
> CREATE TRIGGER blog_entries_publish BEFORE INSERT ON `blog_entries` FOR EACH ROW SET
> NEW.published = IFNULL(NEW.published, NOW()),
> NEW.updated = IFNULL(NEW.updated, '0000-00-00 00:00:00');
>
> CREATE TRIGGER blog_entries_update BEFORE UPDATE ON `blog_entries` FOR EACH ROW SET
> NEW.updated = CASE
> WHEN NEW.updated IS NULL THEN OLD.updated
> WHEN NEW.updated = OLD.updated THEN NOW()
> ELSE NEW.updated
> END,
> NEW.published = IFNULL(NEW.published, OLD.published);
> ================================================
>
> --
> Dmitry
>
>


From: Artemeey - 15/11/2010 - 09:42:58
Subject:два TIMESTAMP-а в MySQL 5.0
-----------------
Спасибо, очень удобно


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
41326



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |