MySQL事务,MySQL事务实现
MySQL事务,MySQL事务实现
文章目录
- 事务的四大特性
- 事务的隔离级别
- 事务的不一致性
事务的四大特性
事务的四大特性ACID(原子性、一致性、隔离性、持久性)
- 原子性(Atomicity):事务是一个不可再分的个体,要么全部成功,要么全部失败。
- 一致性(Consistency):事务执行后必然将数据库从一个一致性状态转换到另一个一致性状态
- 隔离性(Isolation):事务之间是互不影响的
- 持久性(Durability):事务一旦提交,对数据库的影响是持久的
1、查看事务是否是自动提交(ON表示自动提交打开,OFF表示关闭)
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set, 1 warning (0.02 sec)
2、设置事务自动提交属性
设置关闭事务自动提交可以用set autocommit = OFF;
和set autocommit = 0;
,同理,1=ON。
mysql> set autocommit=OFF;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)
事务的隔离级别
- Read Uncommitted(读未提交):允许事务A读取B事务未提交的数据,隔离性最差;
- Read Committted(读已提交):事务读取到别的事务已提交的事务,避免造成脏读;
- Repeatable Read(可重复读):在同一个事务内的查询结果都是一致的。避免了脏读和不可重复读。是MySQL的默认隔离级别。
- Serializable(串行化):事务以串行化的方式执行,避免了脏读、不可重复读、幻读问题。安全性最高。
查看MySQL的事务隔离级别:
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set, 1 warning (0.00 sec)
事务的不一致性
- 脏读:指读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读
- 不可重复读:指两次读取到的数据不一致的情况。比如事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。强调的是更新。
- 幻读:和可重复读类似,但是事务二的数据操作仅仅是插入和删除,不是修改数据,读取的记录数量前后不一致。
不同的隔离级别导致的数据不一致情况:
读未提交 | 读已提交 | 可重复读 | 串行化 | |
---|---|---|---|---|
脏读 | 是 | 否 | 否 | 否 |
不可重复读 | 是 | 是 | 否 | 否 |
幻读 | 是 | 是 | 是 | 否 |
评论暂时关闭