数据库事务四大特性
1、原子性(Atomicity)
即使事务的一部分失败,整个事务也会失败。这样,每个事务都必须 100% 成功才能成功提交到数据库。
2、一致性
系统要么将事务写入数据库(将数据库从一种有效状态更改为另一种状态),要么还原事务。
3、隔离性
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
4、持久性
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
事务演示
1、通过命令行查看 MySQL 8.0 事务隔离级别
select @@transaction_isolation;
2、从命令行开启两个窗口,随后开启两个事务
通过对比在第一个窗口没有提交事务之前,第二个窗口查看不了第一个窗口更改的数据
当第一个窗口执行了事务提交之后,第二个窗口才能看见第一个窗口更改过的数据
3、提示 : 数据库默认采取的是自动提交事务
事务隔离级别
1、脏读
读取未提交的数据,也被称之为脏读(Dirty Read)
2、不可重复读
同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
3、重复读
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
存在幻读问题:幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
4、Serializable 序列化
最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读