Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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触发器即使在一切都正确的情况下也不会更新_Mysql_Triggers - Fatal编程技术网

更新后的MySql触发器即使在一切都正确的情况下也不会更新

更新后的MySql触发器即使在一切都正确的情况下也不会更新,mysql,triggers,Mysql,Triggers,选项卡1 "id" "name" "addr" "country" "status" "1" "norman" "1st" "US" "2" "2" "kirk" "2nd" "US" "2" 选项卡2 "id" "name" "addr" "country" "pos" "total" "1" "norman" "1st" "US" "0"

选项卡1

"id"    "name"      "addr"  "country"   "status"
"1"     "norman"    "1st"   "US"        "2"
"2"     "kirk"      "2nd"   "US"        "2"
选项卡2

"id"    "name"      "addr"  "country"   "pos"   "total"
"1"     "norman"    "1st"   "US"        "0"     "0"
"2"     "kirk"      "2nd"   "US"        "0"     "0"
Tab\u 1
中的状态设置为
0
时,我在
Tab\u 1
上的
update
后使用下面的触发器。问题是,即使它是正确的,它也不会起任何作用。我该如何纠正这一点

CREATE DEFINER=`root`@`localhost` TRIGGER `tab_2_upd` AFTER UPDATE ON `tab_1` 
FOR EACH ROW BEGIN
if new.status = '0' then
update tab_2 set pos = pos+1, total = total+1 where id = new.id;
//Should it be new.id or old.id? I tried both but still no luck.
end if;
END

这是另一种由于未更改分隔符而导致多条语句中断的情况。这是一个很常见的错误

试试这个:

DELIMITER $$

DROP TRIGGER IF EXISTS  `tab_2_upd`$$

CREATE DEFINER=`root`@`localhost` TRIGGER `tab_2_upd` AFTER UPDATE ON `tab_1` 
FOR EACH ROW BEGIN
    if new.status = '0' then
        update tab_2 set pos = pos+1, total = total+1 where id = new.id;
    end if;
END$$

DELIMITER ;
更新时触发器既有旧值也有新值,由于我认为
id
的值永远不会改变(不应该改变),所以使用任何值(旧值或新值)都是安全的

关于分隔符有一个很好的答案