SQL 触发器 - 有一个会搞乱新的 SQL 查询
SQL Trigger - Having one is messing up new SQL queries
我可以手动执行以下代码:
UPDATE pfields_cont p, members m
SET m.member_group_id = 6
WHERE p.member_id = m.member_id
AND m.member_group_id != 6
AND p.field_2 = 'Teacher';
但是,如果我尝试使用与上面相同的代码创建触发器,在我的数据库中创建新用户时会出现此错误:
Can't update table 'members' in stored function/trigger because it is
already used by statement which invoked this stored function/trigger
(1442)
有人可以帮忙修复触发器吗?
谢谢!
编辑 1:
完整的触发器定义:
CREATE TRIGGER `newTeacher` AFTER INSERT ON `members` FOR EACH ROW UPDATE
pfields_cont p,
members m
SET
m.member_group_id = 6
WHERE
p.member_id = m.member_id
AND m.member_group_id != 6
AND p.field_2 = 'Teacher'
由于您不能在触发器的定义中引用相同的 table(用于读取或写入),如果 [=12=,则可以根据将 member_group_id
设置为 6 来简化触发器处理] 是 Teacher
:
CREATE TRIGGER `newTeacher` BEFORE INSERT ON `members`
FOR EACH ROW UPDATE
BEGIN
Declare fieldInfo varchar(30);
SELECT field_2 INTO fieldInfo
FROM pfields_cont
WHERE pfields_cont.member_id = NEW.member_ID;
IF fieldInfo = 'Teacher' THEN
SET NEW.member_group_id = 6;
END IF;
END;
我可以手动执行以下代码:
UPDATE pfields_cont p, members m
SET m.member_group_id = 6
WHERE p.member_id = m.member_id
AND m.member_group_id != 6
AND p.field_2 = 'Teacher';
但是,如果我尝试使用与上面相同的代码创建触发器,在我的数据库中创建新用户时会出现此错误:
Can't update table 'members' in stored function/trigger because it is already used by statement which invoked this stored function/trigger (1442)
有人可以帮忙修复触发器吗?
谢谢!
编辑 1:
完整的触发器定义:
CREATE TRIGGER `newTeacher` AFTER INSERT ON `members` FOR EACH ROW UPDATE
pfields_cont p,
members m
SET
m.member_group_id = 6
WHERE
p.member_id = m.member_id
AND m.member_group_id != 6
AND p.field_2 = 'Teacher'
由于您不能在触发器的定义中引用相同的 table(用于读取或写入),如果 [=12=,则可以根据将 member_group_id
设置为 6 来简化触发器处理] 是 Teacher
:
CREATE TRIGGER `newTeacher` BEFORE INSERT ON `members`
FOR EACH ROW UPDATE
BEGIN
Declare fieldInfo varchar(30);
SELECT field_2 INTO fieldInfo
FROM pfields_cont
WHERE pfields_cont.member_id = NEW.member_ID;
IF fieldInfo = 'Teacher' THEN
SET NEW.member_group_id = 6;
END IF;
END;