巧用SQL的with语法生成临时结果集,进行查询与更新同步操作,解决高并发下对数据的重复访问

来源:互联网 发布:cf积分刷枪软件 编辑:程序博客网 时间:2024/06/15 14:03

目前,我们通过Java去读取数据,并更新数据时,首先会在Java代码中读取数据,再设定某些值,再去更新数据。那么有可能会有多个线程读到相同的内容,


就算在读时用for update,但在返回结果到Java时,在做更新数据之前,总会有那么一点空隙,可能会导致高并下操作数据库时访问到相同的数据。


而通过SQL中的with语法,首先更新数据,再将更新后受影响数据行放到临时表中,就可避免上述情况。


SQL代码如下:


with upt as (update user_info set is_valid='4' WHERE id_user_info in(selectid_user_infofromuser_infowhereis_valid in ('0', '1')for update)RETURNING *)selecto.id_user_info as "id",o.name,o.agefromupt o



阅读全文
1 0
原创粉丝点击