快捷搜索:
来自 网络数据库 2019-11-24 16:40 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

新京葡娱乐场网址:数据库事物隔离四种级别详

数据库事物隔离级别有四种,按照隔离性,由低到高依次是:1.Read Uncommitted

                                                   2.Read Committed

                                                   3.Repeatable Read

                                                   4.Serializable

按照并发性则顺序相反。

                                  √: 可能出现    ×: 不会出现

 

  脏读 不可重复读 幻读
Read uncommitted(未提交读)
Read committed(已提交读) ×
Repeatable read(可重复读) × ×
Serializable(可串行化) × × ×

 

1.Read uncommitted

   读未提交,即在SQL查询中,读取了未提交的数据。在mysql中,默认的事物级别是Repeatable read;默认自动提交模式是打开的,现做如下修改如下所示,

   (1)关闭自动提交   

mysql> show variables like 'autocommit';
 --------------- ------- 
| Variable_name | Value |
 --------------- ------- 
| autocommit    | ON    |
 --------------- ------- 
1 row in set (0.00 sec)

mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'autocommit';
 --------------- ------- 
| Variable_name | Value |
 --------------- ------- 
| autocommit    | OFF   |
 --------------- ------- 
1 row in set (0.01 sec)

    (2)修改事物级别为Read uncommitted

mysql> show variables like 'tx_isolation';
 --------------- ----------------- 
| Variable_name | Value           |
 --------------- ----------------- 
| tx_isolation  | REPEATABLE-READ |
 --------------- ----------------- 
1 row in set (0.00 sec)

  mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
  Query OK, 0 rows affected (0.00 sec)

  mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
  Query OK, 0 rows affected (0.00 sec)

当前打开了两个session,在第一个,往表test中插入了一行数据,但是还没有提交,此时通过第二个session可以查询到该条数据。 

            新京葡娱乐场网址 1

      且当第一个session中的事物rollback之后,第二个session又查询不到新插入的数据‘3’

            新京葡娱乐场网址 2

2.Read Committed

      读提交,修改事物几倍为Read Committed      

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)

     此时,在session0中插入了一条数据且未commit,在session1中无法查询到    

            新京葡娱乐场网址 3

       等session0在commit之后,session1可以正常的查询到数据

            新京葡娱乐场网址 4

 

3.Repeatable read

    可重复读,此时修改事物级别为可重复读

mysql> SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)

   此时,test表中存在两笔数据:2和4,如下所示   

mysql> select * from test where col1 <'5';
 ------ 
| col1 |
 ------ 
| 2    |
| 4    |
 ------ 
2 rows in set (0.00 sec)

     此时步骤如下:1.在session0中begin一个事物;

                         2.在session1中插入一条数据(5),并commit;

                         3.在session0中查询,发现查询不到在session1中插入的数据

              新京葡娱乐场网址 5              

      接下来,再做如下操作:1.在session0中commit;

                                     2.在session0中再做查询操作,发现之前在session1中insert的5又可以查询到

              新京葡娱乐场网址 6

 

4.Serializable

   可串行话,是最高的隔离级别,即在读取的每一行数据上会加锁,事物顺序执行。所以会出现锁超时等问题,在实际业务中很少使用。

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:新京葡娱乐场网址:数据库事物隔离四种级别详

关键词: