事务 Transaction
事务是逻辑上的一组操作,要么都执行,要么都不执行
事务方法
- 开启事务:start transaction
- 提交事务:commit
- 回滚事务:rollback
事务的特性:ACID
- 原子性(Atomicity):事务中包含的操作,要么都成功执行,要么都执行失败。
- 一致性(Consistency):数据库总数从一个一致性的状态转换到另一个一致性状态。(总数总保持不变)
- 隔离性(Isolation):一个事务执行的操作不对其他事务内部数据和操作造成影响,并发执行的事务相互独立。
- 持久性(Durability):事务提交后,对数据库中的数据的改变是永久性的,不会因系统崩溃而丢失。
事务的并发时的状态
- 脏读:一个事务正在访问一个数据时,另一个事务修改了这同一个数据而为提交时,之前的事务读取到了修改后的数据,即:“脏数据”。
一个线程中的事务读到了另外一个线程事务中未提交的update数据.
- 不可重复读:一个事务正在访问一个数据时,另一个事务修改了这个数据,在提交后,之前的事务读取到的数据跟修改前的数据不同。
一个线程中的事务读到了另外一个线程事务中已经提交的update的数据.
- 虚度(幻读):一个事务正在访问一个表时,另一个数据插入一条数据,之前的事务再次读时,比之前多了一条数据。
一个线程中的事务读到了另外一个线程事务中已经提交的insert的数据.
注意点:
MySQL默认的隔离级别:repeatable read
ORACLE默认的隔离级别:read committed
查询事务的隔离级别
mysql 5
select @@session.tx_isolation;//查询当前会话事务隔离级别
select @@global.tx_isolation;//查询全局会话事务隔离级别
mysql 8
select @@session.transaction_isolation;//查询当前会话事务隔离级别
select@@global.transaction_isolation;//查询全局会话事务隔离级别
select @@transaction_isolation;//查询事务隔离级别
设置事务的隔离级别
set session transaction isolation level 隔离登记;
事务隔离级别
- read uncommitted(读取未提交):最低隔离级别,允许读取尚未提交的数据变更,可能会导致脏读,不可重复读,幻读。
- read committed(读取提交)