悲观锁和乐观锁
悲观锁和乐观锁 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁。 悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住 乐观锁就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测, 如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做。 在SqlServer等其余很多数据库中,数据的锁定通常采用页级锁的方式, 也就是说对一张表内的数据是一种串行化的更新插入机制, 在任何时间同一张表只会插1条数据,别的想插入的数据要等到这一条数据插完以后才能依次插入。 带来的后果就是性能的降低,在多用户并发访问的时候,当对一张表进行频繁操作时,会发现响应效率很低, 数据库经常处于一种假死状态。 Oracle用的是行级锁,只是对想锁定的数据才进行锁定,其余的数据不相干, 所以在对Oracle表中并发插数据的时候,基本上不会有任何影响 注:对于悲观锁是针对并发的可能性比较大,而一般在我们的应用中用乐观锁足以。 Oracle的悲观锁需要利用一条现有的连接,分成两种方式, 从SQL语句的区别来看,就是一种是 for update,一种是 for update nowait的形式 首先看一下 for update锁定方式。 执行如下的select for update语句