带触发条件的MySQL触发器
是否可以在mysql触发器中插入条件类型的更新?如果我需要在某种类型的更新之后执行某些操作,例如,如果更新是字段值中某种类型的更改。更好地说,如果我需要在另一个表中增加一个值,然后我的原始表中的特定字段将其值更改为特定值,是否有可能? 任何帮助将不胜感激。
我想这一点:带触发条件的MySQL触发器
CREATE TRIGGER Increment
AFTER UPDATE ON Subscription
FOR EACH ROW
BEGIN
UPDATE USER
SET num_sub=num_sub+1
IF NEW.State <> OLD.State AND NEW.STATE='C'
END IF
END
但它不工作,语法错误。我通过phpmyadmin插入触发器。
尝试是这样的:
CREATE TRIGGER Increment
AFTER UPDATE ON Subscription
FOR EACH ROW
BEGIN
IF NEW.State <> OLD.State AND NEW.STATE='C' THEN
UPDATE USER
SET num_sub=num_sub+1
WHERE USER.id = NEW.user_id; -- change this condition as you need
END IF;
END
这也应该工作:
CREATE TRIGGER Increment
AFTER UPDATE ON Subscription
FOR EACH ROW
UPDATE USER
SET num_sub=num_sub+1
WHERE USER.id = NEW.user_id
AND NEW.State <> OLD.State
AND NEW.STATE='C';
注:NEW
和OLD
指该行从Subscription
表正在被更新。 OLD
包含更新前的值。 NEW
包含更新后的值。因此,要检查state
是否已更改,您可以比较NEW.State <> OLD.State
。
USER.id必须是USER表或SUBSCRIPTION表的USER.id? (显然在subscription.userS上有一个指向user.id的FK)。谢谢!! – JamieITGirl
这只是一个问题,因为你没有提供模式和关系。现在将该行更改为'WHERE USER.ID = NEW.userS'。顺便说一句:'USER.id'表示'USER'表中的列id。 'NEW.userS'是刚刚在'Subscription'表中更新的行中的'userS'列。 –
我刚刚尝试过,但它在USER表上没有任何作用。也许这是因为Subscription.UserS指向User.id,但它不是订阅表的主键?如果是这样,我该如何解决? – JamieITGirl
yes是可能的,所以换句话说,当您在某些表操作上运行触发器时,如果表没有在第一个表上执行一些DML,则始终可以在不同的表上执行insert/update/delete操作。 提供您正在尝试做的一些示例示例。 –
'如果NEW.column1 OLD.column1 AND NEW.column1 ='具体值'UPDATE table2 ...'。如果你想得到一个好的答案,你应该发布两个表的CREATE语句,并在你的问题中更具体。 –
可能重复的[MySQL触发器在插入/更新事件](https://*.com/questions/15975877/mysql-trigger-on-insert-update-events) – cwallenpoole