当数据库中插入新数据后,我想获取它的id,由于数据量比较大我需要使用事物隔离来实现,事物的隔离级别IsolationLevel怎么设置为Serializable
begin tran mytran
insert into t() values()
select top 1 id from t with(tablockx) order by id desc
rollback tran mytran
commit tran由于并发数据量比较大,会出现同时插入数据的情况,我主要是想得到新插入数据的id的正确性。还要保证速度。请问怎么样弄比较好,还有这样写的话,会不会因为这里锁定的查询,其它数据就插入不了了?
begin tran mytran
insert into t() values()
select top 1 id from t with(tablockx) order by id desc
rollback tran mytran
commit tran由于并发数据量比较大,会出现同时插入数据的情况,我主要是想得到新插入数据的id的正确性。还要保证速度。请问怎么样弄比较好,还有这样写的话,会不会因为这里锁定的查询,其它数据就插入不了了?
你应该在插入之前再去获取ID.或者参考如下的内容:
1 如何锁一个表的某一行A 连接中执行SET TRANSACTION ISOLATION LEVEL REPEATABLE READbegin transelect * from tablename with (rowlock) where id=3waitfor delay '00:00:05'commit tranB连接中如果执行update tablename set colname='10' where id=3 --则要等待5秒update tablename set colname='10' where id<>3 --可立即执行2 锁定数据库的一个表SELECT * FROM table WITH (HOLDLOCK)
注意: 锁定数据库的一个表的区别SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
select * from table(holdlock)