2)ACID及事务隔离级别
ACID四大特性解释
- 原子性(Atomicity):一个事务内的操作,要么全部成功,要么全部失败。
- 一致性(Consistency):数据库从一个一致性状态,转移到另一个一致性状态。
- 隔离性(Isolation):多个并发事务之间是隔离的。
- 持久性(Durability):数据一旦提交,改变是永久的。
ACID靠什么保证
- 原子性由undo log日志保证, 他记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql;
- 一致性由其他的三大特性来保证;
- 隔离性由MVCC来保证;
- 持久性由redo log保证。重做日志缓冲(redo log buffer)和重做日志(redo log)组成,前者在内存中,后者在磁盘中。redo log 用来记录已成功提交事务的修改信息,并且把redo log持久化到磁盘
事务
(1)事务:
是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败。
(2)事务的控制:
MySQL中的事务默认自动提交,我们可以改成手动
sql
-- 查看事务的提交方式
select @@autocommit;
set @@autocommit = 0; # 设置0为取消自动提交,1为开启自动提交
-- 开启事务
begin; | start transaction;
-- 提交事务
commit;
-- 回滚事务
rollback;
(3)事务的隔离级别
隔离级别 | 脏读 | 丢失修改 | 不可重复读 | 幻读 |
---|---|---|---|---|
Read Uncommitted 读未提交 | 可以出现 | 可以出现 | 可以出现 | 可以出现 |
Read committed 读已提交(Oracle 默认) | 不能出现 | 可以出现 | 可以出现 | 可以出现 |
Repeatable Read 可重复读(mysql 默认) | 不能出现 | 不能出现 | 不能出现 | 可以出现 |
Serializable 可串行化 | 不能出现 | 不能出现 | 不能出现 | 不能出现 |
解释:从上到下安全性由低到高,性能由高到低
sql
-- 查看事务的隔离级别
select @@transaction_isolation
-- 设置事务隔离级别 session是当前的会话,global是全局
set [session|global] transaction isolation level {隔离级别}