2012-04-09 6 views
3

Я рассматриваю возможность использования триггеров в моей базе данных для отслеживания изменений заказов. Каждый раз, когда добавляется заказ, я добавляю точку в таблицу, которая держит оценку в «владении».mysql вызывает проблемы при обновлении

Когда я запускаю эту команду, я могу изменить идентификатор перед добавлением триггера.

UPDATE bookit SET prov_id = 32 where book_id=2; 

после добавления следующего запуска я не могу обновить prov_id и получить эту ошибку

1054 - Неизвестный столбец 'bookit.prov_id' в 'где предложение'

Trigger:

delimiter // 

CREATE TRIGGER update_tenure_it BEFORE 

UPDATE ON bookit FOR EACH ROW 

BEGIN 


if(new.prov_id<>old.prov_id) THEN 

UPDATE provider_score set tenure=(tenure+1) where bookit.prov_id=provider_id; 

END IF; 

END; 

// 

Знаете ли вы, что я делаю неправильно, и где проблема? Должен ли я даже рассматривать использование триггеров для такой операции или просто код в PHP? Благодаря!

ответ

1

В триггерах у вас нет доступа непосредственно к таблице через TABLENAME.FIELD; вместо этого триггеры обновления дают вам old. * и new. * как псевдонимы строки до и после обновления, соответственно. В этом случае должно работать следующее:

delimiter // 

CREATE TRIGGER update_tenure_it BEFORE 

UPDATE ON bookit FOR EACH ROW 

BEGIN 


if(new.prov_id<>old.prov_id) THEN 

UPDATE provider_score set tenure=(tenure+1) where new.prov_id=provider_id; 

END IF; 

END; 

// 
+0

Большое спасибо, я очень ценю это. Это сработало. – igl2000

+0

Не стоит беспокоиться - счастливое кодирование –

0

Вашему обновлению необходимо присоединиться в таблице bookit к обновленной таблице provider_score. Прямо сейчас у него просто есть ссылка на книжку, которая болтается.

+0

Спасибо за ответ. Я могу успешно создать триггер, не имеющий никакого отношения даже после присоединения к «provider_score.provider_id» – igl2000

+0

Я не могу обновить в UPDATE bookit SET prov_id = 3 где book_id = 2; и получите ту же ошибку – igl2000

+0

Можете ли вы обновить свой вопрос с помощью своего нового кода? – Jordan

Смежные вопросы