事务
一般来说,事务必须满足ACID:
(1)A:原子性,或称不可分割性;一个事务所有操作要么全完成,要么全不完成。事务执行过程发生错误,就会回滚到事务开始前的状态
(2)C:一致性;事务开始以及结束后,数据库完整性没被破坏(写入的数据,须符合预设的规则)
(3)I:隔离性;数据库允许多个并发事务同时操作数据,隔离性可防止多个并发事务导致的数据不一致。隔离级别分为:读未提交、不可重复读、可重复读、串行化
(4)D:持久性;事务结束后,对数据的修改是永久的
1、事务控制语言
(1)begin或start transaction显示开始一个事务
(2)commit或commit work提交修改
(3)rollback或rollback work回滚结束事务,撤销所有未提交事务
2、事务处理的两种方式
(1)用begin(开始)、rollback(回滚)、commit(提交确认)来实现
(2)用set改变自动提交:
- set autocommit=0禁止自动提交
- set autocommit=0开启自动提交
3、事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read uncommitted) | 是 | 是 | 是 |
读已提交(read committed) | 否 | 是 | 是 |
可重复读(repeatable read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
注:
- 查看事务隔离级别:
select @@transaction_isolation;
- 设置事务隔离级别:
set session transaction isolation level 设置事务隔离级别;
(1)读未提交
所以事务都可以看到其他未提交事务的执行结果,读取未提交的数据也称之为脏读,实际基本不用
(2)读已提交
大多数数据库默认隔离级别,一个事务只能看见已经提交事务所做的改变
(3)可重复读
mysql默认隔离级别,确保同一事物多个实例并发读取数据时,看到同样的数据行
(4)串行化
最高隔离级别,在每个读的数据行加上共享锁,消耗太大
网友评论