在网上查的都是查询时加锁。然后其他人就不能修改,删除这条记录了。但是我要的是我锁定一条记录,别人查都不能查,必须等我解锁之后才能查。业务是这样的,当用户要修改一条记录时,必须先判断这条记录符不符合条件(先查询判断,再修改)。假设A,B两人在几乎相同的时间进行此操作。执行顺序是这样的,A,B先后执行查询,然后A执行修改,B又执行修改。但是A执行修改后,记录已经不符合修改条件了。B不应该再修改。应该等待A执行完所有的动作之后再执行B的动作。因为是多台应用服务器,不能再程序的线程等方面下工夫,只能在数据库层面想办法
在表中建立一个字段updateTime, A,B先后执行查询,分别获取updateTime,A执行修改,更新updateTime,
B又执行修改,这个时候用updateTime和表中updateTime比较,如果不一致说明这条记录被其他人修改了,B这次操作不能进行。
A select之前手工加X锁
在 Oracle里的锁机制来说 ,
A更新不影响B的查询,B会从回滚段中重构原来的数据,仅仅当B也需要更新的时候,如果A未提交和回滚则出现阻塞,否则B能够进行更新。
其次Oracle的最高事物级别SERIALIZABLE好像也不支持B不能查询
READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。READ COMMITTED 允许幻想读、不可重复读,不允许脏读REPEATABLE READ 允许幻想读,不允许不可重复读和脏读SERIALIZABLE 幻想读、不可重复读和脏读都不允许