Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 创建SQL触发器以更新行值_Mysql_Database Trigger - Fatal编程技术网

Mysql 创建SQL触发器以更新行值

Mysql 创建SQL触发器以更新行值,mysql,database-trigger,Mysql,Database Trigger,我有一个SQL表“收件箱”,列为“调制解调器id”和“用户” 我想创建一个SQL触发器,当modem_id为1时,“user”列被插入值“a”;2对于用户“B” 我已使用if-else创建了一个SQL触发器: delimiter // CREATE TRIGGER upd_user_inbox BEFORE insert ON inbox FOR EACH ROW BEGIN IF NEW.modem_id = 0 THEN UPDATE `in

我有一个SQL表“收件箱”,列为“调制解调器id”和“用户” 我想创建一个SQL触发器,当modem_id为1时,“user”列被插入值“a”;2对于用户“B”

我已使用if-else创建了一个SQL触发器:

delimiter //
CREATE TRIGGER upd_user_inbox BEFORE insert ON inbox
    FOR EACH ROW
    BEGIN
    IF NEW.modem_id = 0 THEN
             UPDATE `inbox` SET `user` = 'A' WHERE modem_id = 1; 
         ELSEIF NEW.modem_id = 2 THEN
             UPDATE `inbox` SET `user` = 'B' WHERE modem_id = 2; 
            ELSEIF NEW.modem_id = 3 THEN
             UPDATE `inbox` SET `user` = 'C' WHERE modem_id = 3; 
            ELSEIF NEW.modem_id = 4 THEN
             UPDATE `inbox` SET `user` = 'D' WHERE modem_id = 4; 
            ELSEIF NEW.modem_id = 5 THEN
             UPDATE `inbox` SET `user` = 'E' WHERE modem_id = 5; 
            ELSEIF NEW.modem_id = 6 THEN
             UPDATE `inbox` SET `user` = 'F' WHERE modem_id = 6; 
            ELSEIF NEW.modem_id = 7 THEN
             UPDATE `inbox` SET `user` = 'G' WHERE modem_id = 7; 
            ELSEIF NEW.modem_id = 8 THEN
             UPDATE `inbox` SET `user` = 'H' WHERE modem_id = 8; 
         END IF;
     END;//
delimiter ;
触发器已成功执行,但不工作。 如果“If else”不起作用,谁能教我用“case”来代替呢

谢谢


无法修改触发器中的表,该触发器是通过修改同一个表q.v.调用的。您可以通过编写存储过程来处理此问题。是否要将当前插入行中的用户列设置为“a”、“B”等?如果是这样,不要使用更新,只需设置
NEW.user='A'
等@RyanVincent yeah它通过使用:If NEW.modem_id=1然后设置NEW.user='A'来工作;感谢您无法在通过修改同一个表q.v.调用的触发器中修改表。您可以通过编写存储过程来处理此问题。是否要将当前插入行中的用户列设置为“a”、“B”等?如果是这样,不要使用更新,只需设置
NEW.user='A'
等@RyanVincent yeah它通过使用:If NEW.modem_id=1然后设置NEW.user='A'来工作;谢谢
CASE NEW.modem_id
WHEN 0 THEN ...
WHEN 2 THEN ...
...
END CASE