zoukankan      html  css  js  c++  java
  • 行级锁 java||数据库

    http://www.cnblogs.com/xiyubaby/p/4623516.html

    select * from t for update 会等待行锁释放之后,返回查询结果。
    select * from t for update nowait 不等待行锁释放,提示锁冲突,不返回结果
    select * from t for update wait 5 等待5秒,若行锁仍未释放,则提示锁冲突,不返回结果
    select * from t for update skip locked 查询返回查询结果,但忽略有行锁的记录 
    
    
    SELECT...FOR UPDATE 语句的语法如下: 
      SELECT ... FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED]; 
    其中: 
      OF 子句用于指定即将更新的列,即锁定行上的特定列。 
      WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待。
    
    “使用FOR UPDATE WAIT”子句的优点如下: 
      1防止无限期地等待被锁定的行; 
      2允许应用程序中对锁的等待时间进行更多的控制。
      3对于交互式应用程序非常有用,因为这些用户不能等待不确定 
      4 若使用了skip locked,则可以越过锁定的行,不会报告由wait n 引发的‘资源忙’异常报告
    
     
    分成两类:加锁范围子句和加锁行为子句

    加锁范围子句:
    在select…for update之后,可以使用of子句选择对select的特定数据表进行加锁操作。默认情况下,不使用of子句表示在select所有的数据表中加锁
    加锁行为子句:

    当我们进行for update的操作时,与普通select存在很大不同。一般select是不需要考虑数据是否被锁定,最多根据多版本一致读的特性读取之前的版本。加入for update之后,Oracle就要求启动一个新事务,尝试对数据进行加锁。如果当前已经被加锁,默认的行为必然是block等待。使用nowait子句的作用就是避免进行等待,当发现请求加锁资源被锁定未释放的时候,直接报错返回。
    在日常中,我们对for update的使用还是比较普遍的,特别是在如pl/sql developer中手工修改数据。此时只是觉得方便,而对for update真正的含义缺乏理解。
    For update是Oracle提供的手工提高锁级别和范围的特例语句。Oracle的锁机制是目前各类型数据库锁机制中比较优秀的。所以,Oracle认为一般不需要用户和应用直接进行锁的控制和提升。甚至认为死锁这类锁相关问题的出现场景,大都与手工提升锁有关。所以,Oracle并不推荐使用for update作为日常开发使用。而且,在平时开发和运维中,使用了for update却忘记提交,会引起很多锁表故障。

    那么,什么时候需要使用for update?就是那些需要业务层面数据独占时,可以考虑使用for update。场景上,比如火车票订票,在屏幕上显示邮票,而真正进行出票时,需要重新确定一下这个数据没有被其他客户端修改。所以,在这个确认过程中,可以使用for update。这是统一的解决方案方案问题,需要前期有所准备。

    如何解锁:
    http://www.cnblogs.com/chenwenbiao/archive/2012/06/06/2537496.html

    java代码行级锁
        @Override
        @Transactional(rollbackFor = Exception.class)
        public void update(String params) {
            synchronized (this) {
             xxxDao.updatexxx(params);
            } 
        }
  • 相关阅读:
    简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题
    男人常做俯卧撑,谁还敢说不行!
    五大穴位
    实战c++中的vector系列--vector的一些异常
    [Canvas画图] 藏图阁(16) 人体穴位
    算法题:剔除字符串(非常有意思)
    怎样在win8系统下建立wifi热点
    【code】flex_进度条样式
    使用bbed改动数据
    Go语言核心之美 3.2-slice切片
  • 原文地址:https://www.cnblogs.com/hahajava/p/10172821.html
Copyright © 2011-2022 走看看