mysql读书笔记


  1. 一、表锁mysql中最基本的锁策略,是开销最小的策略。
    二、表锁锁定整张表。用户在对表进行写操作前,需要先获取写锁,阻塞其他用户对该表的所有读写操作。
    三、表锁在没有写锁时,用户才会获取读锁,读锁与写锁之间是不相互阻塞的
    四、表锁在特定场景中,表锁的性能比较良好。
    五、表锁写锁优先级要高于读锁,,写锁可能会插入到读锁之前,读锁不能插入到写锁之前
    六、ALERT、TABLE之类的语句使用表锁会忽略存储引擎的锁机制
    七、行级锁可以最大程度的支持并发处理,但是开销要比表锁大。
    八、行级锁只在存储引擎层实现。
  2. 事务
    一、事务内的语句要么全部执行成功,要么全部执行失败,不会出现有的执行成功,有的没有执行失败。
    二、原子性是指一个事务必须被视为一个不可分割的最小工作单位。
    三、一致性是指数据库总是从一个一致性的状态转换到另外一个一致性的状态。
    四、隔离性是指一个事务所做的修改在最终提交之前,对其他事务是不可见的(一般情况下,隔离级别不一样,效果不太一样的)。
    五、持久性是指一旦事务提交,所做的修改就会永久保存到数据库中
    六、使用事务和使用锁一样会增加系统的开销
    七、使用start transaction; sql 语句块; COMMIT; ROLLBACK;commit在成功是进行提交,rollback是在有失败的情况下进行回滚。
  3. 隔离级别
    一、主要是针对事务的
    二、未提交读(READ UNCOMMITTED):事务中的修改,即使没有进行提交,对其他事务也是可读的,事务可以读取未提交的数据(脏读),很少使用该隔离级别除非有非常必要的理由的情况下不要使用该隔离级别。
    三、提交读(READ COMMITTED):只有当事务提交后其他事务才是可以可见的。
    四、可重复读(REPEATABLE READ):可以解决脏读的问题,保证了同一个事务中多次读取同样记录的结果是是一致的。该隔离级别会产生幻读,幻读并不是两次读到的不一样是幻读,而是对这个事务后期的业务逻辑有影响的才是幻读。对于下面边的例子中,对于事务A来说,查询为空,按理是可以插入的, 但是A提交之前B插入了id=1,导致A不能Insert,这就是幻读A BEGIN select id from test //此时结果为空 insert into test(id) value (1) commit //此时会报错,主键重复 B BEGIN insert into test (id) value (1); COMMIT;会报**Duplicate entry ‘3’ for key ‘PRIMARY 主键重复’**该隔离级别为mysql默认的。但是Innodb和XtraDB可以通过版本并发控制解决幻读的问题。
    五、可串行话(SERIALIZABLE):是最高的隔离级别。可以避免可重复读的幻读现象,会在读取的每一行数据上加锁。该隔离级别会造成超时和锁争用的现象。一般情况下不会使用该隔离级别。
  4. 死锁
    多个事务试图以不同的顺讯所内固定资源时或多个事务同时锁定同一个资源时会产生死锁。产生死锁的原因是真正数据的冲突(通常很难避免),有一些则是由于存储引擎的实现方式引起的。一般数据库都实现了各种死锁检测和死锁的超时机制。大多数情况下需要重新执行因死锁回滚的事务即可。

引用于电子工业出版社出版的《高性能MySQL》一书

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值