mysql异常怎么回滚 mysql 异常( 四 )


MySQL 默认的事务隔离级别 , 能确保同一事务的多个实例在并发读取数据时看到同样的数据行,理论上会导致一个问题,幻读(Phontom Read) 。例如,第一个事务对一个表中的数据做了修改,这种修改会涉及表中的全部数据行 , 同时第二个事务也修改这个表中的数据,这次的修改是向表中插入一行新数据 , 此时就会发生操作第一个事务的用户发现表中还有没有修改的数据行
InnoDB 通过多版本并发控制机制(MVCC)解决了该问题:InnoDB 通过为每个数据行增加两个隐含值的方式来实现,这两个隐含值记录了行的创建时间、过期时间以及每一行存储时间发生时的系统版本号,每个查询根据事务的版本号来查询结果
通过强制事务排序,使其不可能相互冲突 , 从而解决幻读问题 。简而言之,就是在每个读的数据行上加上共享锁实现,这个级别会导致大量的超时现象和锁竞争 , 一般不推荐使用
为了解决数据库并发控制问题,如走到同一时刻客户端对同一张表做更新或者查询操作,需要对并发操作进行控制,因此产生了锁
共享锁的粒度是行或者元组(多个行) , 一个事务获取了共享锁以后,可以对锁定范围内的数据执行读操作
排他锁的粒度与共享锁相同 , 一个事务获取排他锁以后,可以对锁定范围内的数据执行写操作
有两个事务 A 和 B , 如果事务 A 获取了一个元组的共享锁,事务 B 还可以立即获取这个元组的共享锁,但不能获取这个元组的排他锁,必须等到事务 A 释放共享锁之后 。如果事务 A 获取了一个元组的排他锁,事务 B 不能立即获取这个元组的共享锁,也不能立即获取这个元组的排他锁,必须等到 A 释放排他锁之后
意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁和意向排他锁 。意向共享锁表示一个事务有意对数据上共享锁或者排他锁 。有意表示事务想执行操作但还没真正执行
锁的粒度主要分为表锁和行锁
表锁的开销最小,同时允许的并发量也是最小 。MyISAM 存储引擎使用该锁机制 。当要写入数据时 , 整个表记录被锁,此时其他读/写动作一律等待 。一些特定的动作,如 ALTER TABLE 执行时使用的也是表锁
行锁可以支持最大的并发,InnoDB 存储引擎使用该锁机制 。如果要支持并发读/写,建议采用 InnoDB 存储引擎
mysql异常怎么回滚的介绍就聊到这里吧 , 感谢你花时间阅读本站内容 , 更多关于mysql 异常、mysql异常怎么回滚的信息别忘了在本站进行查找喔 。

推荐阅读