本文主要是介绍巧用SQL的with语法生成临时结果集,进行查询与更新同步操作,解决高并发下对数据的重复访问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目前,我们通过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
这篇关于巧用SQL的with语法生成临时结果集,进行查询与更新同步操作,解决高并发下对数据的重复访问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!