zoukankan      html  css  js  c++  java
  • Oracle锁相关(LOCK TABLE)

    目录

    一、基本语法

    事务锁语法

    2. lockmode

            Oracle支持的锁模式有ROW SHAREROW EXCLUSIVEROW UPDATESHARE

    2.1 EXLUSIVE排他锁

            表级锁:当一个Session获取到了排他锁以后,其他用户只能进行查询操作,一般对一张表进行drop操作时获得该锁。

    2.2 SHARE共享锁

            表级锁:SHARE模式允许并发查询,但是一个Session如果获得了共享锁,那么就不能对该表进行update操作。

    2.3 ROW SHARE行共享模式

            行级锁:允许并发访问,但是不允许用户独占式访问。这个锁模式等价于WITH SHARE UPDATE(以前老版本的写法)

    2.4 ROW EXCLUSIVE行排他模式

            行级锁:ROW EXCLUSIVE模式一般来说用户不会手动进行设置,在一个Session会话对数据库进行insert、update以及delete操作时,该用户就会自动的获取到这个ROW EXCLUSIVE锁。在ROW EXCLUSIVE和ROW SHARE模式一样,但是如果一个Session获得了ROW EXCLUSIVE锁,那么另外的Session就不能进行ROW EXCLUSIVE锁定,也不能对该表进行SHARE锁定。

    2.4 SHARE ROW EXLUSIVE共享行排他

            行级锁:如果一个Session获取了SHARE ROW EXLUSIVE锁,该用户以及其他用户可以对整张表进行查询,但是,不允许其他用户对该表进行SHARE锁定或者更新表的数据。

    2.5 小结

             如果一个table 被一个session锁定,无论什么锁定,另外的session就不能获得对于该表exclusive的锁定,也就是说不能删除该表,其实很容易相同,别人在用那个表,你去把表给删除了,肯定是不允许的.

             如果能够对某个表进行row exclusive 锁定,那么肯定可以执行dml操作。

            可以这样理解share锁,顾名思义,共享锁是用来共享的,既然是共享,所以其他用户只能查看,不能更改。

             可以这样理解exclusive锁,顾名思义,排它锁就是独享的,其他用户只能查看,不能修改。

    2.6 for update 语句与锁模式

    begin;
    
    select * from tickets from update of tnum
    update tickets set tnum = tnum - 100 where tno = 1;
    
    commit;
    

            如果,在for update后面没有写of tnum,那么 这个Session就是做了一个表独占的操作;如果加了of tum,指定了一张表中的一列数据,并且,使用where子句进行删选,这个Session就是做了一个行独占的操作。为了保证sql语句的执行性能,在写sql语句时,应该尽量的做到行锁定的模式,否则会影响到其他人的操作。

    问题:

            在设置事务的隔离级别后,进行不加for update的查询操作,MySQL的优化器是否会自动进入到行级锁的模式。

  • 相关阅读:
    list和set的区别
    tcp与udp协议的区别
    c3p0的数据库连接池
    mysql的连接
    HAVING 的使用 及笛卡尔积
    break-跳出内循环
    求素数(范围自改)
    1-100累加
    1-100累乘
    类实例:飞机大战
  • 原文地址:https://www.cnblogs.com/gupan/p/8867602.html
Copyright © 2011-2022 走看看