MYSQL触发器的问题

初学者
我写的触发器,有多句SQL语句
其中好几句是 UPDATE SET CASE WHEN THEN END格式的

然后navicat的触发器会把语句中的END; 作为触发器结束的符号

请问怎么解决才可以写多句UPDATE SET CASE WHEN THEN END格式的SQL语句,在同一个触发器中

楼上的写的都SQL Server支持的语法 MySQL中不是这样写滴如下: CREATE TRIGGER trg_Table1 AFTER insert ON `Table1` FOR EACH ROW BEGIN INSERT INTO dede_addonarticle(id,typeid,body) SELECT id,typeid,description FROM dede_archives WHERE id=LAST_INSERT_ID() END;在这里最麻烦的是取得自增量最后插入的值,根据MySQL的官方说明,是使用LAST_INSERT_ID()这个函数,LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。用MySQL命令行测试,结果是正确的,但是使用MySQL Query Browser测试时,LAST_INSERT_ID返回了全部的id值。可能是软件的问题,跟MySQL无关。另外,如果你有一次有多行记录插入时,LAST_INSERT_ID只返回第1个,例如: INSERT INTO dede_archives(typeid,description) VALUES (222, 'Mary') , (333, 'Jane') , (444, 'Lisa'); 一次插入3行记录,假设此时生成的id是4,5,6三个,但是用LAST_INSERT_ID只能返回4 因此,对于批量插入时的处理,你要结合使用ROW_COUNT()来判断插入的记录数 INSERT INTO dede_addonarticle(id,typeid,body) SELECT id,typeid,description FROM dede_archives WHERE id>=LAST_INSERT_ID() AND id <=LAST_INSERT_ID()+ROW_COUNT() 我没有测试过,你自己测试一下再说,基本上应该没问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-24
给你个思路吧
我看你的触发器是插入时启用的,可以用INSERTED,它就是刚插入的行(具体用法你看看MSSQL的帮助),剩下的不用说了吧

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网