2014-09-04 6 views
0

У нас есть 2 таблицы, в которых хранятся имена пользователей и пароли, а также два веб-сайта, на которых пользователь вводит логин (плохая идея, которую я знаю, но у меня нет контроля над этим).Невозможно обновить другую таблицу в триггере

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

Запрос:

update authenticate set password = md5('superman') where member_id = 108649 

Ошибка:

ERROR 1442 (HY000) at line 3: Can't update table 'authenticate' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 

Вот два триггера:

-- When update runs on the authenticate table 
CREATE TRIGGER `authenticate_after_update` AFTER UPDATE ON `authenticate` FOR EACH ROW BEGIN 
    IF new.password != old.password THEN 
     update auth set passwd = new.password where member_id = new.member_id; 
    end if; 
END 

-- When update runs on the auth table 
CREATE TRIGGER `auth_after_update` AFTER UPDATE ON `auth` FOR EACH ROW BEGIN 
    if new.passwd != old.passwd then 
     update authenticate set password = new.passwd where member_id = new.member_id; 
    end if; 
END 

ответ

0

Я был в состоянии получить его с помощью этой нити: How to avoid circular Trigger dependencies in MySQL

Вот результат, который я придумал:

-- When update runs on the authenticate table 
CREATE TRIGGER `authenticate_after_update` AFTER UPDATE ON `authenticate` FOR EACH ROW BEGIN 
    if @updating is null then 
     set @updating = 1; 
     update auth set passwd = new.password where member_id = new.member_id; 
     set @updating = null; 
    end if; 
END 

-- When update runs on the auth table 
CREATE TRIGGER `auth_after_update` AFTER UPDATE ON `auth` FOR EACH ROW BEGIN 
    if @updating is null then 
     set @updating = 1; 
     update authenticate set password = new.passwd where member_id = new.member_id; 
     set @updating = null; 
    end if; 
END 
Смежные вопросы