Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> содать триггер для 2-х таблиц, если изменяется 1-я то изменить 2-ю 
V
    Опции темы
ЛунныйОборотень
Дата 10.5.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 12.11.2006

Репутация: нет
Всего: 1



Здравствуйте!

у меня есть 2 таблицы- 

Testdetali с полями id, izgotovitel ,naimenovanie 

и 

Testizgotovitel с полями id, izgotovitel, naimenovanie

хочу организовать связь между этими таблицами -если обновился izgotovitel в таблице Testizgotovitel то

обновить izgotovitel в таблице Testdetali


Начал писать треггер-

Код

create trigger tr1 after update of izgotovitel on Testizgotovitel 
for each row 
begin 
update Testdetali set izgotovitel=Testizgotovitel.izgotovitel
  



до этого момента mysql не возражал ...

Код

where izgotovitel=old.izgotovitel;
end;


эти строчки не выполняются-пишет  

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'afret update of izgotovitel on Testizgotovitel for each row begin update Testdet' at line 1

в чем проблема?
фактически я пытаюсь выполнить команду update ,где присваиваю новое значение Testizgotovitel.izgotovitel .

и мне нужно написать какое значение заменяю в таблице Testdetali - то есть izgotovitel=old.izgotovitel

Подскажите как это сделать?

PM MAIL   Вверх
Gwire
Дата 13.5.2009, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



ЛунныйОборотень, меня как-то смущает эта надпись
Код
of izgotovitel on Testizgotovitel

У меня лично эта конструкция не работает. И здесь ничего об OF не написано. Попробуй вот так:
Код

delimiter //

create trigger tr1
after update on Test_izgotovitel
for each row
begin
    if (new.izgotovitel != old.izgotovitel)
      then update Test_detali set izgotovitel=new.izgotovitel
             where izgotovitel=old.izgotovitel;
    end if;
end;
//

delimiter ;

P.S. Важно не забывать устанавливать delimiter.



Это сообщение отредактировал(а) Gwire - 13.5.2009, 11:24
PM MAIL   Вверх
Gwire
Дата 13.5.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



 И кстати, ЛунныйОборотень, если я правильно представил себе твою структуру базы данных,
то стоит ее привести, хотя-бы, до 3-тей нормальной формы - избавится от связей многие ко многим.
Хотя "Test" в словах Testizgotovitel и Testdetali указывает на пример - примеры не сильно отходят от сути.

Я советовал бы выделить сущности Изготовитель и Деталь в отдельные таблицы ни как не связаные между собой.
d_izgotovitel и d_detal. А связь осуществить через 3-ю
Код
CREATE TABLE IF NOT EXISTS `l_izgotovitel_detal` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `izgotovitel_id` INT NOT NULL ,
  `detal_id` INT NOT NULL ,
PRIMARY KEY ( `id` ) ,
INDEX ( `izgotovitel_id`, `detal_id` )
) COMMENT = 'Кто и что выпускает';

В этом случае (1) надобность в триггере отпадает, (2) экономится место и (3) время анализа таблиц уменьшается.

P.S. Для таблиц d_izgotovitel и d_detal не забыть указать PRIMARY KEY ( `id` ), что-бы их указывать в l_izgotovitel_detal. smile 



Это сообщение отредактировал(а) Gwire - 13.5.2009, 12:03
PM MAIL   Вверх
ЛунныйОборотень
Дата 14.5.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 12.11.2006

Репутация: нет
Всего: 1



Gwire, спасибо!думаю над этим...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1981 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.