MySQL相关书籍的读书笔记(六)

  1. 事务(默认自动提交,可以设置set autocommit=0关闭自动提交,不建议关闭自动提交)

    1. 事务的特性
      1. 原子性(Atomicity)
        操作要么全部执行成功,要么全部失败,保证数据的一致性;
      2. 一致性(consistency)
        数据库的数据在操作前后必须满足业务规则的约束。甲乙账户的总金额在转账前和转账后必须一致;
      3. 隔离性(isolation)
        数据库允许多个并发事务同时对数据库进行读写和修改,防止事务并发执行时由于交叉执行而导致的数据不一致。
        比如用户甲乙之间进行转账操作的同时,用户丙向用户甲进行转账;如果同时进行,甲乙账户之间的一致性不能达到满足;所以在甲乙事务执行过程中,其他事务不能访问(修改)当前相关的数据。
      4. 持久性(durability):事务结束后,对数据的影响是持久化的,不可修改的。
    2. 事务语句:begin开始,commit|rollback结束;它是一组DML语句的集合;
    3. truncate和delete区别
      truncate 是DDL语句,delete是DML语句,
      共同点:清空表内的数据
      区别:
      1. 在事务内,truncate不能回滚,delete可以回滚;2.
      2. 并且truncate会清空表的自增属性,使自增属性重新从1开始;
      3. delete from table_name;
      4. truncate table table_name;
    4. 事务的隔离级别:四种
      1. 读未提交read uncommitted简称RU;在一个事务中,可以读取到其他事务未提交的数据变化,产生脏读dirty read,不建议使用;
      2. 读已提交 read committed 简称RC;在一个事务中,可以读取到其他事务已经提交的数据,这种读取也叫做不可重复读;可能会产生幻读现象;是Oracle默认的事务隔离级别;
      3. 可重复读repetable read 简称RR,是MySQL默认的事务隔离级别;在一个事务中,直到事务结束前,都可以反复读取到事务刚开始看到的数据,并不会产生脏读、幻读、不可重复读
      4. 串行serializable在每个读的数据行上都需要加表级别的共享锁,在每次写数据库时,都需要加上表级别排他锁,这样会造成innoDB的并发性能下降,发生大量的超时和锁竞争,不建议使用。
    5. 脏读:在事务隔离级别为读未提交中出现的现象。一个事务读取到了其他事务尚未提交的数据;
    6. 不可重复读:在一个事务中,读取到了其他事务针对旧数据的修改记录(常见的操作就是update、delete语句)。发生在RC隔离级别中。
    7. 幻读:在一个事务中读取到了其他事务新增的数据,仿佛出现幻觉(常见与insert语句)。发生在RC隔离级别中。
    8. 可重复读:
    1. 概述:不同的存储引擎,支持不同的锁;InnoDB支持行锁,有时也可以升级为表锁,但是MyISAM只支持表锁。

    2. 表锁的特点:开销小、加锁块、不会出现死锁、锁粒度大、发生锁冲突几率大、并发性低

    3. 行锁的特点:开销大,加锁慢,会出现死锁,锁粒度小、发生锁冲突几率低、并发性较表锁高。

    4. innoDB的锁类型:

      1. 读锁(共享锁)
        简称S锁,一个事务获取了一个数据行的读锁,其他事务可以继续获得该数据行的读锁,但是其他事务不能获取这个行数据的写锁,不能对这条数据进行增删改操作。
        使用

        select ...lock in share mode ;--在被读取的行记录或者行范围上加上一个读锁,其他事务可以读,但是要想申请写锁,就会被阻塞;
        
      2. 写锁(排他锁)
        简称X锁,一个事务获取了一个数据行的写锁,其他事务就不能获得该该的其他锁,写锁优先级最高。
        select … for update 会加上一个写锁;

      3. MDL锁
        MySQL5.5版本中增加的meta data lock 元数据锁,保证表中元数据的信息。在一个会话a中开启了查询事务后,会自动获得MDL锁,会话b就不能执行任何DDL语句操作。

      4. 意向锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值