zoukankan      html  css  js  c++  java
  • MySQL 锁与事务控制

    一、锁:

      表锁:MyISAM、Memory 存储引擎;行锁:InnoDB 存储引擎;页锁:BDB 存储引擎;默认情况下表锁和行锁都是自动获得的,不需要额外的命令;但是有时候用户需要明确的进行行锁或者进行事务的控制,以便确保整个事务的完整性,这样就需要用到事务控制和锁定语句来完成。

      1、lock / unlock 语法:

         lock tables mytable read / write;  #获取读或写锁

         select * from mytable ;

         unlock tables; #释放锁

      2、read 锁也称共享锁,当使用read 锁定一张表(行)时,其他的会话仍然可使用read 锁(读操作),但不能使用write 锁(写操作),直到read 锁被释放;

      3、write 锁也称排他锁,当使用write 锁定一张表(行)时,其他的会话的读写操作就被阻塞,直到write 锁释放;

    二、数据库事务:

      数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执行。

      1、ACID特性:

        原子性 (Atomic):是指事务包含的所有操作要么全部成功,要么全部失败回滚;不存在一部分成功,一部分失败;

        一致性(Consistency):是指事务必须使数据库从一个一致的状态变到一个一致的状态,也就是执行事务之前和之后的状态都必须处于一致的状态;

        隔离性(Isolation):是指当多个用户并发操作数据库同一张表时,数据库此时会为每个用户开启一个新事务,事务之间是隔离的,各自操作互不影响;

        持久性(Durability):是指当一个事务提交后,对于数据库中改变的数据是永久性的,即便是在数据库遭遇故障的情况下也不会丢失提交的事务操作;

      2、使用事务:

        MySQL 默认是自动提交事务,可以通过 set autocommit = 0/1 设置禁止/开启自动提交;   

    set autocommit = 0; #禁止自动提交事务
    start
    transaction; #开启事务 select * from mytable ; commit; #提交事务 rollback; #回滚事务

      3、事务隔离的重要性:

        3.1、如果没有事务隔离,会发生几种问题:

          脏读(Dirty Read):一个事务处理过程中读取了另一个未提交的事务中的数据;

          不可重复读(NonRepeatable Read):对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询的隔离期间,另一个事务修改并提交了该数据;

          幻读(Phantom Read):在一个事务中读取到了别的事务插入(删除)的数据,导致前后不一致;

        3.2、不同隔离级别的问题:   

        3.3、MySQL 中的隔离级别的设置: 

          隔离级别:Serializable | Repeatable | Read committed | Read uncommitted

          设置session 级别是指当前session 以后的所有事务

          设置global 级别是指之后的所有session ,不包括当前session

          默认设置级别是指当前session 的下一个事务 

    select @@tx_isolation; #查看当前事务的隔离级别
    
    # 修改事务的隔离级别
    set [global | session] transaction isolation level Read uncommitted;
    set tx_isolation='Read uncommitted';

          

        

  • 相关阅读:
    zhanwei
    站位
    Web前端开发:SQL Jsp小项目(二)------添加修改
    Web前端开发:SQL Jsp小项目(一)
    JDBC(用Eclipse操作数据库Oracle)的基础操作集合
    Thread多线程stopSleep顺序问题
    IO流详解之代码详解
    IO流详解(半教材类型)
    用JQuery编写textarea,input,checkbox,select
    Java编写ArrayBasic制作一个简单的酒店管理系统
  • 原文地址:https://www.cnblogs.com/haiyangwu/p/10466455.html
Copyright © 2011-2022 走看看