事务的概念、四大特性、并发问题、隔离级别等介绍

事务介绍

一、事务的概念

数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。通俗理解,事务其实就是一系列指令的集合。
事务必须服从ACID原则。ACID指的是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

二、事务的四大特性

1、原子性:操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
2、一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
3、隔离性:在该事务执行的过程中,无论发生的任何数据的改变都应该只存在于该事务之中,对外界不存在任何影响。只有在事务确定正确提交之后,才会显示该事务对数据的改变。其他事务才能获取到这些改变后的数据。
4、持久性:当事务正确完成后,它对于数据的改变是永久性的。

三、事务的并发问题

当两个或两个以上的线程,同时访问同一条记录时,就存在事务并发问题,可能造成数据混乱。

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的就是脏数据。
2、不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
3、幻读:事务A对数据库的数据进行批量操作。事务B完成记录的添加,这时新加的记录可能就没有进行事务A的批量操作。这就是幻读。

解决事务并发问题,需要采用事务隔离级别来进行。

四、事务的四种隔离级别

1、READ_UNCOMMITTED:读未提交,该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读。
2、READ_COMMITTED:读已提交,该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读。
3、REPEATABLE_READ:可重复读,该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。
4、SERIALIZABLE:串行化,所有事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读和幻读。但是这将严重影响程序的性能。

注: MYSQL默认:REPEATABLE_READ可重复读

五、事务的两种模式

1、自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。
2、手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。

注:MySQL常用存储引擎 INNODB和MyISAM,其中MyISAM不支持数据库事务。MySQL中create table 语句默认为MyISAM。

猜你喜欢

转载自blog.csdn.net/qq_42547733/article/details/128643707