1. 先在当前数据库中新建一张表,例如 TB_FLAG,然后任意插入一条数据: CREATE TABLE TB_FLAG ( FLAG INT ) INSERT INTO TB_FLAG SELECT 02. 在 BEGIN TRAN 的语句块中先执行这条语句,放在你的“INSERT INTO report_information ”语句的上面: UPDATE TB_FLAG SET FLAG = FLAG + 1 原理:在事务里面使用UPDATE时会保持X锁,这样就保证了同一时间运行的其他相同代码会被已经运行的事务BLOCK住,从而防止了数据重复。
CREATE TABLE TB_FLAG
(
FLAG INT
)
INSERT INTO TB_FLAG SELECT 02. 在 BEGIN TRAN 的语句块中先执行这条语句,放在你的“INSERT INTO report_information ”语句的上面:
UPDATE TB_FLAG SET FLAG = FLAG + 1 原理:在事务里面使用UPDATE时会保持X锁,这样就保证了同一时间运行的其他相同代码会被已经运行的事务BLOCK住,从而防止了数据重复。
举个例子:
http://blog.csdn.net/zhazhuzhao/article/details/7708362
‘2012-06-06‘,获取最大的SPE_ID是1 第一个用户调用的时候,传进来的时间参数是‘2012-06-07‘,获取最大的SPE_ID也是5,那么下次在传入参数’2012-06-07‘的时候,SPE_ID最大值为6。
如果传入的是‘2012-06-06’的话,值就是2。我用JAVA开了3个线程调用,就会出现重复数据,因为并发获取到了同一个最大值。