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




MySQL.RU - Webboard



Вернуться
триггеры (Michael) 06/11/2007 - 19:08:50
      Re: триггеры (EuGen) 08/11/2007 - 12:43:17

> Original message text:
> From: Michael - 06/11/2007 - 19:08:50
> Subject:триггеры
> -----------------
> в общем хочется реализовать следующий функционал:
> есть табличкакод SQL
> CREATE TABLE `ceway_tree` (
> `id` int(11) NOT NULL auto_increment,
> `pid` int(11) NOT NULL default '0',
> `ord` int(11) NOT NULL default '0',
> `lang` varchar(3) collate utf8_bin NOT NULL default 'rus',
> `alias` varchar(255) collate utf8_bin NOT NULL,
> `name` varchar(255) collate utf8_bin NOT NULL,
> `component` varchar(255) collate utf8_bin NOT NULL,
> `modules` text collate utf8_bin NOT NULL,
> `template` varchar(255) collate utf8_bin NOT NULL,
> PRIMARY KEY (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ;
>
> на нее нужно повесить 2 триггера (update, delete), которые
> перед изменением/удалением записи копировали бы ее в другую таблицу, такой же структуры (ceway_tree_backup)...
> можно ли как-то это реализовать?
>


From: EuGen - 08/11/2007 - 12:43:17
Subject:триггеры
-----------------
Во-первых, это возможно только в mysql начиная с 5-й версии.
Во-вторых, проще Вам сделать так: скопировать уже имеющуюся таблицу в резервную, и делать вставки/обновления из приложения сразу к 2-м таблицам (потому что если таблица большая, то обрабатывать все строки каждый раз очень плохо - быстродействие будет на нуле).
Соответственно Вы вообще обойдетесь без триггеров.
Минус такого подхода в том, что он должен быть реализован в приложении, а не на сервере, и при сбое работы приложения, можно потерять актуальность данных в резервной таблице. То есть, вариант с триггерами будет в принципе намного надежнее.
Вот примерная реализация:

DELIMITER |

CREATE TRIGGER backupins BEFORE INSERT ON ceway_tree
FOR EACH ROW BEGIN
INSERT INTO ceway_tree_backup (id, pid, ord, lang, alias, name, component, modules, template) VALUES (NEW.id, NEW.pid, NEW.ord, NEW.lang, NEW.alias, NEW.name, NEW.component, NEW.modules, NEW.template)
END;
|
CREATE TRIGGER backupupd BEFORE UPDATE ON ceway_tree
FOR EACH ROW BEGIN
UPDATE ceway_tree_backup SET id=NEW.id, pid=NEW.pid, ord=NEW.org, lang=NEW.lang, alias=NEW.alias, name=NEW.name, component=NEW.component, modules=NEW.modules, template=NEW.template WHERE id=OLD.id
END;
|
CREATE TRIGGER backupdel BEFORE DELETE ON ceway_tree
FOR EACH ROW BEGIN
DELETE FROM ceway_tree_backup WHERE id=OLD.id
END;
|


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

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

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



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