我在mybatis框架下对mysql进行操作遇到一个问题:我希望对多张结构相同的表进行更新,而且只是更新其中 ctr_cp 属性的值,但是我采用下面的语句时报错
update (select * from a_reviews union all select * from b_reviews) as test set ctr_cp=true
我之所以这么写,是因为查表是可以的:
select * from (select * from a_reviews union all select * from b_reviews) as test
于是我就去搜了搜,发现其实多表更新并不用这么麻烦,但是网上给出的都是多表联合更新的情况:
update a_reviews,b_reviews set a_reviews.ctr_cp=true, b_reviews.ctr_cp=1 where ...
要注意的是,我的表格式都相同,这么写有些繁琐,一来是where一定要写条件,而来这种语句多用于两个表联合查询,需要增加两个表的连接条件。于是后来我用了数据库的过程调用,这样子可以比较方便的对多个表进行操作,具体如下:
使用常规的创建存储过程方法,会发现各种报错。在SQL SERVER下可以成功的写法,在MySQL下可能不行,原因是MySQL中需要设置DELIMITER。
因为在procedure中经常要用到默认的命令结束符-