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




MySQL.RU - Webboard



Вернуться
Тригеры (sergej) 06/01/2008 - 15:45:24
      Re: Тригеры (vi.k) 09/01/2008 - 06:24:39
      Re: Тригеры (sergej) 10/01/2008 - 12:15:21
      Re: Тригеры (vi.k) 11/01/2008 - 04:55:59
      Re: Тригеры (sergej) 11/01/2008 - 12:22:12
      Re: Тригеры (vi.k) 15/01/2008 - 02:54:20
      Re: Тригеры (vi.k) 15/01/2008 - 03:18:51
      Re: Тригеры (vi.k) 15/01/2008 - 04:04:14

> Original message text:
> From: sergej - 06/01/2008 - 15:45:24
> Subject:Тригеры
> -----------------
> Как переделать эти тригеры на mysql
> CREATE TABLE SERVICE (
> ID INTEGER NOT NULL,
> PARENT INTEGER NOT NULL,
> NAME VARCHAR(30) CHARACTER SET WIN1251 COLLATE WIN1251,
> CCOUNT INTEGER DEFAULT 0);
>
>
> ALTER TABLE SERVICE ADD CONSTRAINT PK_OBJECTS PRIMARY KEY (ID);
>
>
> SET TERM ^ ;
>
> CREATE TRIGGER TBD_SERVICE FOR SERVICE
> ACTIVE BEFORE DELETE
> POSITION 0
> AS
> BEGIN
> UPDATE SERVICE O
> SET O.CCOUNT = O.CCOUNT - 1
> WHERE O.ID = old.PARENT;
> END^
>
> CREATE TRIGGER TBI_SERVICE FOR SERVICE
> ACTIVE BEFORE INSERT
> POSITION 0
> AS
> BEGIN
> UPDATE SERVICE O
> SET O.CCOUNT = O.CCOUNT + 1
> WHERE ID = new.PARENT;
> END^
>
> CREATE TRIGGER TBU_SERVICE FOR SERVICE
> ACTIVE BEFORE UPDATE
> POSITION 0
> AS
> BEGIN
> if (old.PARENT <> new.PARENT) then
> begin
> UPDATE SERVICE O SET O.CCOUNT = O.CCOUNT - 1
> WHERE O.ID = old.PARENT;
> UPDATE SERVICE O SET O.CCOUNT = O.CCOUNT + 1
> WHERE O.ID = new.PARENT;
> end
> END^
> SET TERM ; ^
>


From: vi.k - 09/01/2008 - 06:24:39
Subject:Тригеры
-----------------
Есть разница в определении таблицы:

CREATE TABLE `service` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`parent` INTEGER NOT NULL,
`name` VARCHAR(30) CHARACTER SET cp1251 COLLATE cp1251_general_ci,
`ccount` INTEGER DEFAULT 0,
PRIMARY KEY (`id`),
INDEX `idx_parent` (`parent`)
);

Можно и без кавычек ``
Отдельно первичный ключ определять нет необходимости.
AUTO_INCREMENT - определяет поле, которое будет автоматически увеличиваться при добавлении записей. Никаких скрытых, но подразумеваемых полей типа ROWID нет.

CHARACTER SET можно указать отдельно для поля, а можно по умолчанию для всей таблицы:
CREATE TABLE (...) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

_ci = "case insensitive"
_cs = "case sensitive"


Вместо SET TERM используйте DELIMITER:
DELIMITER ^ - в начале
DELIMITER ; - в конце

А дальше вам лучше самостоятельно, я в триггерах не силён, а то сейчас насоветую:
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

Попробуйте что-то вроде:
DELIMITER |
CREATE TRIGGER `tbd_service` BEFORE DELETE ON `service` FOR EACH ROW BEGIN
UPDATE `service`
SET `service`.`ccount` = `service`.`ccount` - 1
WHERE `service`.`id` = OLD.`parent`;
END |
DELIMITER ;

На счёт OLD не уверен - пробуйте


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

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

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



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