事务的特性:
原子性:原子性对应的英文是Atomicity,即表示事务中所有操作是不可再分割的原子单位。事务中所有操作要么全
部执行成功,要么全部执行失败;
一致性:一致性对应的英文是Consistency,事务执行后,数据库状态与其它业务规则保持一致。例如转账业务,无
论事务执行成功与否,参与转账的两个账号余额之和应该是不变的;
隔离性:隔离性对应的英文是Isolation,是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不
会相互干扰;
持久性:持久性对应的英文是Durability,指的是一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据
库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据
1.事务的特性
* 原子性 ‐‐ 强调的是事务的不可分割的特性
* 一致性 ‐‐ 强调的是事务执行前后数据需要保证一致
* 隔离性 ‐‐ 强调的是多个事务同时操作一条记录,事务之间不能互相干扰
* 持久性 ‐‐ 强调的是事务一旦结束了,数据将永久的保存到数据库中
2.这些特性都是数据库提供的
不考虑事务的隔离性会引发的问题:
1.脏读:一个事务读取到了另一个事务未提交的数据!
2.不可重复读:一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调的是update,修改记录
的数据。
3.虚度(幻读):一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调是insert,向表中添
加一条数据。
设置事务的隔离级别(解决读的问题) :
1.事务的隔离级别(设置数据库的隔离级别,根据级别的不同,解决上述的读的问题)
* Read uncommitted ‐‐ 什么都解决不了
* Read committed ‐‐ 避免脏读,但是不可重复读和虚读有可能产生
* Repeatable read ‐‐ 避免脏读和不可重复读,虚度有可能产生的
* Serializable ‐‐ 避免各种读
2.4种隔离级别有安全性和效率
* 安全 Serializable > Repeatable read > Read committed > Read uncommitted
* 效率 Serializable < Repeatable read < Read committed < Read uncommitted
3.数据库都有自己默认的隔离级别
* MySQL的数据库,默认的隔离级别是Repeatable read,避免脏读和不可重复读