请问sql语句在select前为什么要先update一下,这样能保证并发时数据一致吗?

问题描述

背景介绍:db2数据库,jdbc连接,java类用sql语句操作数据库。功能介绍:一张表专门用于存储流水号,这个流水号递增。由于是web程序,可能有很高的并发性。我们保证每个人如果想得到流水号,流水号不会重复。语句大概如下:第1行:sql="update table1 set serialno=serialno where id=1";(这行的两个serialno都是table1 的属性)第2行:sql="select serialno from table1 where id=1";第3行:将上面得到的serialno加上1存入newSerialno变量中;第4行:sql="update table1 set serialno='"+newSerialno+"' where id=1";(这行的newSerialno是变量)这4行都是在同一个事务中(transaction);我不明白的地方是:为什么要用第1行?执行这句对数据库不进行任何修改,难道这样就能够保证并发时流水号不重复。请牛人帮忙,能解释详细点更好!

解决方案

这个和你的数据库事务级别有关系,默认情况下select不是排他锁,允许脏读。你可以去了解一下,不过各个数据库的情况有所不同,但是机制还是一样的。
解决方案二:
应该采购select ... fro update的语句

时间: 2024-12-23 14:07:40

请问sql语句在select前为什么要先update一下,这样能保证并发时数据一致吗?的相关文章

请问sql语句from后可以用selectfromwhere语句创建表吗

问题描述 请问sql语句from后可以用selectfromwhere语句创建表吗 请问sql语句from后可以用selectfromwhere语句创建表吗 如果可以的话是不是可以直接在后面起一个名字 解决方案 Navicat for MySQL界面下如何用SQL语句创建表?sql语句 update fromsql语句 update from 解决方案二: 可以 在sql语句中. ';'就代表一句话,可以接着写. 解决方案三: 你是想把查询结果保存到一个表吗? 你可以用Select Into语句

LINQ体验(5)——LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg

上一篇讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ to SQL语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ to SQL.LINQ to Entities.LINQ to XML,但是相对来说LINQ to SQL在我们程序中使用最多,毕竟所 有的数据都要在数据库运行着各种操作.所以先来学习LINQ to SQL,其它的都差不多了,那么就从Select说起吧,这个在编写程序中也最为常

mysql日期查询sql语句总结(查询一天,查询一周,查询一个月的数据)

我的日期 首先我们获取到的日期格式是这样的:2009-2-12或者2009-3-3或者2009-10-12,我们在组合sql语句的时候可以这样:(分了三个例子)  代码如下 复制代码 @1select * from user where birthday>'2009-2-3' and birthday<'2009-4-3' 这样我们能够查到所有包括2009-2-3并且大于2009-2-3的所有的用户信息. @2如果我们是这样组合的  代码如下 复制代码 select * from user w

求正则替换sql语句为select count(*) from

问题描述 求替换SQL的办法selectt0.*(selectcount(*)fromnewswherecreatorid=t0.userid)pCountfromusert0leftjoin(select*fromxxxxx)t1ont0.userid=t1.idwheret0.xx=xx需要查询出该SQL的count有多少个以前我是在这句sql外面包了句selectcount(*)from(上面那句sql)但是发现MYSQL在大数据量下的嵌套查询的速度简直是无法忍受那么我就想试着用正则表达式

Sql语句之select 5种查询

select 5种子句:注意顺序where / group by /having / order by / limit / 清空表中的数据:truncate 表名: 导入表结构(不含数据): create table 表2 like 表1; 删除表:drop table 表名: 导入数据:insert into g2 select * from stu order by name, fenshu desc; //从临时表中查询=========子查询select * from (select *

请帮忙写一条SQL语句查询前一小时信息

问题描述 请帮忙写一条SQL语句查询前一小时信息 MSSQLServer,有个字段DateTime:2015-03-09 16:08:51.617 我想查询前一小时的信息,因为我公司是45分下班的,所以前一小时应该是14:45:00~14:45:00. 请问如何写一条语句可以查到当前小时的前一小时的信息呢?谢谢帮忙. 解决方案 select * from table where DATEDIFF('h',DateTime,now())>1 and DATEDIFF('h',DateTime,no

原生的sql语句怎么写成HQL语句SELECT * FROM tmms_bookout WHERE c_id IN (SELECT cs_id FROM tm

问题描述 原生的SQL语句:SELECT*FROMtmms_bookoutWHEREc_idIN(SELECTcs_idFROMtmms_courseWHEREtc_id="+id+")怎么写成HQL语句呀?大神帮帮忙呀!谢谢! 解决方案 解决方案二:tmms_bookout和tmms_course有没有配置映射关系?解决方案三:哇kao这种问题都出来问找度娘吧解决方案四:楼主你提供的这信息太少了类与类的关系呢?不会写hql你打开Hibernate文档的15章这里基本上有丰富的例子和用

SQL语句集锦

--语 句                                功 能--数据操作SELECT      --从数据库表中检索数据行和列INSERT      --向数据库表添加新数据行DELETE      --从数据库表中删除数据行UPDATE      --更新数据库表中的数据--数据定义CREATE TABLE    --创建一个数据库表DROP TABLE     --从数据库中删除表ALTER TABLE     --修改数据库表结构CREATE VIEW     --创建

分组后分组合计以及总计SQL语句(稍微整理了一下)

今天看到了这个文章感觉内容挺多的,就是比较乱,实在不好整理,脚本之家小编就简单整理了一下,希望大家能凑合看吧 分组后分组合计以及总计SQL语句   1)想一次性得到分组合计以及总计,sql: SELECT 分组字段 FROM 表 GROUP BY 分组字段 compute sum(COUNT(*)) 2)分组合计1: SELECT COUNT(*) FROM (SELECT 分组字段 FROM 表 GROUP BY 分组字段 )别名 3)分组合计2: SELECT COUNT(*) FROM (