mysql怎么写事务 mysql怎么实现的事务( 二 )


MySQL 默认的事务隔离级别,能确保同一事务的多个实例在并发读取数据时看到同样的数据行,理论上会导致一个问题 , 幻读(Phontom Read) 。例如 , 第一个事务对一个表中的数据做了修改 , 这种修改会涉及表中的全部数据行,同时第二个事务也修改这个表中的数据 , 这次的修改是向表中插入一行新数据,此时就会发生操作第一个事务的用户发现表中还有没有修改的数据行
InnoDB 通过多版本并发控制机制(MVCC)解决了该问题:InnoDB 通过为每个数据行增加两个隐含值的方式来实现,这两个隐含值记录了行的创建时间、过期时间以及每一行存储时间发生时的系统版本号 , 每个查询根据事务的版本号来查询结果
通过强制事务排序 , 使其不可能相互冲突,从而解决幻读问题 。简而言之,就是在每个读的数据行上加上共享锁实现,这个级别会导致大量的超时现象和锁竞争 , 一般不推荐使用
为了解决数据库并发控制问题,如走到同一时刻客户端对同一张表做更新或者查询操作,需要对并发操作进行控制,因此产生了锁
共享锁的粒度是行或者元组(多个行) , 一个事务获取了共享锁以后 , 可以对锁定范围内的数据执行读操作
排他锁的粒度与共享锁相同,一个事务获取排他锁以后 , 可以对锁定范围内的数据执行写操作
有两个事务 A 和 B,如果事务 A 获取了一个元组的共享锁,事务 B 还可以立即获取这个元组的共享锁,但不能获取这个元组的排他锁,必须等到事务 A 释放共享锁之后 。如果事务 A 获取了一个元组的排他锁,事务 B 不能立即获取这个元组的共享锁 , 也不能立即获取这个元组的排他锁,必须等到 A 释放排他锁之后
意向锁是一种表锁 , 锁定的粒度是整张表,分为意向共享锁和意向排他锁 。意向共享锁表示一个事务有意对数据上共享锁或者排他锁 。有意表示事务想执行操作但还没真正执行
锁的粒度主要分为表锁和行锁
表锁的开销最小,同时允许的并发量也是最小 。MyISAM 存储引擎使用该锁机制 。当要写入数据时,整个表记录被锁,此时其他读/写动作一律等待 。一些特定的动作,如 ALTER TABLE 执行时使用的也是表锁
行锁可以支持最大的并发 , InnoDB 存储引擎使用该锁机制 。如果要支持并发读/写,建议采用 InnoDB 存储引擎
Mysql数据库中 , 事务是指什么?如何使用该功能?MySQL 事务
什么是事务?
MySQL 事务主要用于处理操作量大,复杂度高的数据 。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样 , 这些数据库操作语句就构成一个事务!
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务 。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行 。
事务用来管理 insert,update,delete 语句
一般来说 , 事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability) 。
原子性:一个事务(transaction)中的所有操作,要么全部完成 , 要么全部不完成,不会结束在中间某个环节 。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样 。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏 。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作 。

推荐阅读