Skip to content
Advertisement

SQL Trigger – Having one is messing up new SQL queries

I am able to manually execute the following code:

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';

However, if I try creating a Trigger with the same code as above, I get this error when creating a new user in my database:

Can’t update table ‘members’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger (1442)

Can anybody help fix the trigger?

Thanks!

EDIT 1:

Full trigger definition:

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'

Advertisement

Answer

Since you cannot refer to the same table in a trigger’s definition (for reading or writing), the trigger handling can be simplified based on setting the member_group_id to 6 if field_2 is 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;
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement