一.事务的特性
1.原子性
事务要么全部成功,要么全部回滚
2.一致性
事务的完整性约束没有被破坏,如果遇到违反约束的情况会回滚
3.隔离性
每个事务不会受其他事务的影响
4.持久性
事务一旦提交就会永久生效。
支持事务的引擎:innodb,NDBCluster,TokuDB
不支持事务的引擎:MyISAM,MEMORY
二. 事务的隔离级别
1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
2)read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的
3)repeatable read:重读读取:可以解决脏读 和 不可重复读 幻读 ---mysql默认的
4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读---相当于锁表
脏读: 事务T1修改了1行数据,事务T2在事务T1提交之前读到了该行数据
幻读: 事务T1读取了满足某条件的一个数据集,事务T2插入了一行或者多行数据满足了T1的选择条件,导致事务T1再次使用同样的选择条件读取的时候,得到了比第一次读取更多的数据集。
不可重复读:事务T1读取了一行数据,事务T2接着修改或者删除了该行数据,当T1再次读取同一行数据的时候,读到的数据时修改之后的或者发现已经被删除
1. 修改数据库隔离级别
- seesion级别修改
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
- global级别修改
set global transaction isolation level read uncommitted;
set global transaction isolation level read committed;
set global transaction isolation level repeatable read;
mysql默认的事务是自动提交
关闭自动提交:set autocommit=0;
2.事务隔离级别实验
mysql> select * from t3;
+----+------+
| id | name |
+----+------+
| 4 | mxt2 |
| 5 | mxt3 |
| 6 | mxt4 |
+----+------+
3 rows in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
虽然可重复读仍然可以看到session1 修改前的数据,但是以该条件进行更新时,没有任何数据被修改。
1.原子性
事务要么全部成功,要么全部回滚
2.一致性
事务的完整性约束没有被破坏,如果遇到违反约束的情况会回滚
3.隔离性
每个事务不会受其他事务的影响
4.持久性
事务一旦提交就会永久生效。
支持事务的引擎:innodb,NDBCluster,TokuDB
不支持事务的引擎:MyISAM,MEMORY
二. 事务的隔离级别
1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
2)read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的
3)repeatable read:重读读取:可以解决脏读 和 不可重复读 幻读 ---mysql默认的
4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读---相当于锁表
脏读: 事务T1修改了1行数据,事务T2在事务T1提交之前读到了该行数据
幻读: 事务T1读取了满足某条件的一个数据集,事务T2插入了一行或者多行数据满足了T1的选择条件,导致事务T1再次使用同样的选择条件读取的时候,得到了比第一次读取更多的数据集。
不可重复读:事务T1读取了一行数据,事务T2接着修改或者删除了该行数据,当T1再次读取同一行数据的时候,读到的数据时修改之后的或者发现已经被删除
1. 修改数据库隔离级别
-查看事务级别
mysql> show variables like 'tx_isolation%'; +---------------+----------------+ | Variable_name | Value | +---------------+----------------+ | tx_isolation | READ-COMMITTED | +---------------+----------------+
- seesion级别修改
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
- global级别修改
set global transaction isolation level read uncommitted;
set global transaction isolation level read committed;
set global transaction isolation level repeatable read;
mysql默认的事务是自动提交
关闭自动提交:set autocommit=0;
2.事务隔离级别实验
mysql> select * from t3;
+----+------+
| id | name |
+----+------+
| 4 | mxt2 |
| 5 | mxt3 |
| 6 | mxt4 |
+----+------+
3 rows in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
虽然可重复读仍然可以看到session1 修改前的数据,但是以该条件进行更新时,没有任何数据被修改。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15412087/viewspace-2152465/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15412087/viewspace-2152465/