欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

mysql索引下推,mysql索引优化

终极管理员 知识笔记 548阅读

甲转账100元钱给乙,只执行扣款语句时,由于突然停电,转账语句不执行。如果交易不是原子性的,A账户已经扣款,B账户却没有收到增额,会造成生活中的纠纷。在这种情况下,需要事务的原子性来确保事务要么被执行,要么不被执行。注意:当所有这些操作成功执行后,事务被提交。如果一个操作失败,事务将回滚。一致性一致性一组操作

在一致的状态就是一致性。即数据经过计算后数据的总量不变。

比如转账事务不管事务成功还是失败应该保证事务结束后表中A和B的存款总额跟事务执行前一致

事务执行前数据库存储的数据处于一致的状态事务执行时数据库存储的数据可能处于不一致的状态事务执行后不管执行成功还是执行失败数据库存储的数据都必须处于一致的状态 隔离性Isolation

当不同的事务并发执行的时候如果有一个事务正在使用一个数据而另一个事务则不能使用同一个事物这就是隔离性。要保证事务的”隔离“得让这些需要使用同一个数据的事务串行执行。

持久性Durability

在事务完成后该事务对数据库的修改得持久的保存不能随着程序的重启、电脑的重启而改变这就是持久性

事务之间的相互影响 脏读

脏读指读脏数据脏数据就是一个临时的数据不代表最终的结果。

比如事务A在修改数据修改到一半了得到一个中间数据a但是最终的数据是b。但是事务B在事务A执行到一半时读取到了中间数据a然后进行后续操作那么事务B的后续操作也都是错误的。

解决
对写操作加锁写操作就包含了修改操作。即当事务A执行时就把数据锁到小黑屋里不让其他人拿到执行完再放出来。

不可重复读

不可重复读指一个事务内两次相同的查询却得到了不同的数据

比如事务A先获取到数据a进行循环判断满足条件则可以执行后续操作但是中途事务B获取到数据a修改为b此时事务A可能还没执行完后续的操作就被迫退出循环。

解决
对读操作加锁。即当事务A获取到数据就把数据锁到小黑屋不让其他人拿到知道事务A执行完再放出来。

幻读

幻读指两次读取数据时对应的结果集不同

比如在一张表中有a、b、c三个数据。事务A获取了a数据此时表中的数据是a、b、c但是同时事务B把表中的b数据修改为了B当事务A再次获取a数据时此时表中的数据是a、B、c

解决
串行化。即不能让事务A和事务B同时执行。

丢失更新

丢失更新指两次修改同一个数据时第二次修改会忽略第一次已经修改过把第二次修改后的值当作是最终的结果。

比如a1 事务A读取到a1 并且a12同时事务B读取到a1并且a12最终将a的值修改为2而不是3.

解决
同时加读锁和写锁。规则在一个事务加了写锁后别的事务既不能进行写操作也不能进行读操作。

事务隔离级别

read uncommited: 允许读未提交的数据。并发程度最高隔离性最低。可能存在脏读、不可重复读、幻读的问题。

read commited: 只能读 提交之后的数据相当于写加锁。并发程度降低隔离性提高。解决了脏读问题可能存在不可重复读、幻读的问题。

repeatable read: 相当于读和写都加锁。并发程度再降低隔离性再提高。解决了脏读、不可重复读的问题可能存在幻读的问题。

serializable: 严格执行串行化。并发程度最低隔离性最高。解决了脏读、不可重复读、幻读的问题

注MySQL默认的隔离级别是 repeatable read

标签:
声明:无特别说明,转载请标明本文来源!