数据库加锁、隔离级别问题
有一个表t1,其中有一列col1(不重复),我想先从col1中选取最大的值,对其做一定运算,然后再将其插入数据库中。
如果有2个程序A、B,就可能出现A在选择之后运算之前,B也进行了选择,那么他们选择的是同样的最大值,运算后的结果是一样,插入的时候会出错。
有什么办法能避免?
我想在选择之前给整张表加排他锁,我试了下,不能添加,但仍可以选择,网上说是隔离级别造成的,请问如何查看表的隔离级别呀?
还有没有更好的方法呢?
[解决办法]
先锁,然后再取。
如起一个事务,先update(保证两个进程更新的是同样的数据,比如可以搞一个只有一条记录的一张表来更新),然后再select,最后提交或回滚事务。
那么两个进程同时处理的时候,第一个进程事务未提交之前,第二个进程就取不到数据。