事务四大特性:
- 原子性:整个事务作为一个整体,要么都成功,要么都失败。
- 一致性:同一个事务,相同的条件,不同的时间要得到相同的结果
- 隔离性:两个事务在未提交之前只能看到自己修改是数据,不能看到对方修改的数据。
- 持久性:持久化到磁盘
查看数据库及当前会话的事务隔离级别:
mysql> select @@global.tx_isolation,@@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
分别设置数据库及当前事务的隔离级别:
SET GLOBAL tx_isolation='REPEATABLE-READ';
SET SESSION tx_isolation='SERIALIZABLE';
事务的四个隔离级别分别为:
- REPEATABLE RREAD:可重复读,(默认级别)
- READ COMMITTED:读已提交
- READ UNCOMMITTED :读未提交
- SERIALIZABLE:串行化
(事务的隔离级别建议在创建数据路的时候,在配置文件中指定,最好不要后期修改)
详解如下:
可重复读:
1、避免了脏读(事务1未提交的数据事务2读不到)
2、避免不可重复读(两个都开启事务,一个会话修改数据,另一个会话查不到)
3、避免了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数不相同,是修改之前的行数)
4、发生了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是回话2 修改的结果)
已提交读:
1、避免了脏读 (事务1未提交的数据事务2读不到)
2、发生了不可重复读(两个都开启事务,一个会话修改数据,另一个会话能查到)
3、发生了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数相同,)
4、发生了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是会话2 修改的结果)
未提交读:
1、发生了脏读(事务1未提交的数据事务2能读到)
2、发生了不可重复读(两个都开启事务,一个会话修改数据,另一个会话能查到)
3、发生了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数相同,)
4、发生了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是回话2 修改的结果)
串行化:
1、避免了脏读(会话1update后会话2没有查看的权利,提交后才能查看)会话1 先连mysql数据库,会话2后连
2、避免不可重复读(两个都开启事务,一个会话修改数据,另一个会话查不到)
3、避免了幻读 (两个都开启事务,一个会话增加或删除一行,统计行数,另一个会话统计行数和前会话统计的行数不相同,是修改之前的行数)
4、避免了丢失更新(两个会话分别开启事务,会话1修改一行数据,会话2 也修改这行数据,会话1查看到的不是自己修改的结果,而是回话2 修改的结果)