mybatis框架下mysql多表更新的操作
2015-03-26 14:00
731 查看
我在mybatis框架下对mysql进行操作遇到一个问题:我希望对多张结构相同的表进行更新,而且只是更新其中 ctr_cp 属性的值,但是我采用下面的语句时报错
要注意的是,我的表格式都相同,这么写有些繁琐,一来是where一定要写条件,而来这种语句多用于两个表联合查询,需要增加两个表的连接条件。于是后来我用了数据库的过程调用,这样子可以比较方便的对多个表进行操作,具体如下:
使用常规的创建存储过程方法,会发现各种报错。在SQL SERVER下可以成功的写法,在MySQL下可能不行,原因是MySQL中需要设置DELIMITER。
因为在procedure中经常要用到默认的命令结束符--分号" ; " ,所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束,-这里将结束符号改成美元符号$。
1、先在mysql中创建过程:
注意,在update_test后面有个(),是因为没有要传入的参数。如果需要传递参数作为判断条件或者赋值,可像下面的代码(网上找):
--此存储过程的过程名是p3,该过程包含两个参数,--一个是输入类型的(以IN标示),参数名是nameid,类型是int,--一个是输出类型的(以OUT标示),参数名是person_name,类型是varchar(10)--此存储过程的作用是查询出zzm表的全部内容,会输出结果集(data set),然后--再查询表中记录的ID是nameid的字段name,将其输出到第二个输出类型的参数里面,这个查询--不会输出结果集。
(参考:http://database.51cto.com/art/201010/229242.htm)
2、在xml文件中:
这样就可以实现多表更新了。
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中经常要用到默认的命令结束符--分号" ; " ,所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束,-这里将结束符号改成美元符号$。
1、先在mysql中创建过程:
delimiter $ create procedure update_test() begin update a_reviews set ctr_cp=true; update b_reviews set ctr_cp=true; ... end $
注意,在update_test后面有个(),是因为没有要传入的参数。如果需要传递参数作为判断条件或者赋值,可像下面的代码(网上找):
create procedure p3(IN nameid int, OUT person_name varchar(10)) begin select * from test.zzm; select zzm.name into person_name from test.zzm where zzm.id = nameid; end
--此存储过程的过程名是p3,该过程包含两个参数,--一个是输入类型的(以IN标示),参数名是nameid,类型是int,--一个是输出类型的(以OUT标示),参数名是person_name,类型是varchar(10)--此存储过程的作用是查询出zzm表的全部内容,会输出结果集(data set),然后--再查询表中记录的ID是nameid的字段name,将其输出到第二个输出类型的参数里面,这个查询--不会输出结果集。
(参考:http://database.51cto.com/art/201010/229242.htm)
2、在xml文件中:
<update id="update_test" statementType="CALLABLE"> call update_test() <update>
这样就可以实现多表更新了。
相关文章推荐
- ExtJs 4.*、Guice3、MyBatis3、MySql架构的 弱权限管理框架 更新 一
- ExtJs 4.*、Guice3、MyBatis3、MySql架构的 弱权限管理框架 更新 二
- 批量更新实战 框架spring mybatis 和MySQL
- springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever
- Yii框架操作数据库的几种方式与mysql_escape_string
- springmvc整合mybatis框架源码 bootstrap html5 mysql oracle maven
- mysql操作语句(持续更新ing!!!)
- 史上最简单的 MySQL 教程(二十二)「数据的高级操作 之 更新 & 删除」
- ExtJs 4.*、Guice3、MyBatis3、MySql架构的 弱权限管理框架 一
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- ExtJs 4.*、Guice3、MyBatis3、MySql架构的 弱权限管理框架 四
- MyBatis+MySql Insert操作失败解决办法
- [置顶] A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查
- MySql删除和更新操作对性能有影响吗
- springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码 SSH maven
- 安装mysql并通过mybatis进行数据库操作
- mysql如何实现插入数据时如果不存在则插入如果存在则更新的操作
- mysql_mybatis添加数据时如果数据存在就更新,如果不存在就插入
- Spring+Mybatis+Mysql搭建分布式数据库访问框架的方法
- mybatis mysql delete in操作只能删除第一条数据的方法