zoukankan      html  css  js  c++  java
  • 锁:

    读锁:共享锁
    写锁:独占锁

    锁粒度:

    表级锁
    行级锁

    锁策略:在锁粒度及数据安全性寻求的平衡机制;
      每种存储引擎都可以自行实现其锁策略和锁粒度;
    MySQL在服务器级也实现了锁,表级锁;

    用户可显示请求施加锁;

    (1) LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ...
    
        lock_type:
          READ [LOCAL] | [LOW_PRIORITY] WRITE
    
       UNLOCK TABLES

    示例:为了便于测试,我们将自动添加的锁关掉:

    SET GLOBAL innodb_table_locks = OFF
    施加读锁: LOCK TABLES students READ;  //此时,其他会话可以继续查询,但不能执行更新、插入等操作
    施加写锁: LOCK TABLES students WRITE;  //此时,其他会话不可以查询,也不可以进行更新等操作
    
    解锁: UNLOCK TABLES;
    (2)FLUSH TABLES tb_name[,...] [WITH {READ | WRITE} LOCK]

    示例:

    施加读锁:FLUSH TABLES students WITH READ LOCK;
    施加写锁:FLUSH TABLES students WHTH WRITE LOCK;

    解锁:UNLOCK TABLES;

    (3) SELECT clause FOR UPDATE

    示例:此种方式需要在事务中生效

    关掉自动提交事务的功能:SET GLOBAL autocommit = OFF;
    查询数据并施加一个更新锁:SELECT * FORM students FOR UPDATE;  //此时,其他会话可以查询数据但不能进行更新等操作
    手动提交事务: commit;    // 只有当commit提交事务之后,其他会话才能进行更新操作。

    锁分类:

    隐式锁: 由存储引擎自动施加锁
    显示锁: LOCK TABLES等都是显式锁

    注意: 建议使用隐式锁

  • 相关阅读:
    洛谷 P4317
    洛谷 P6218
    洛谷 P4999
    洛谷 P2657
    CSP 2020-S2 题解
    2020CSP-S2游记
    Spring Boot中使用WebSocket总结
    防盗链
    JVM JRE和JDK的区别和联系
    Java 注解学习
  • 原文地址:https://www.cnblogs.com/ckh2014/p/14468372.html
Copyright © 2011-2022 走看看