您的位置:首页 > 数据库 > MySQL

mysql默认隔离级别测试

2015-03-09 19:10 99 查看
mysql的默认的隔离级别是可重复读,oracle的默认的隔离级别是读提交,下面是mysql的隔离级别的测试:

查看mysql的事务隔离级别

SELECT @@global.tx_isolation;

SELECT @@session.tx_isolation;

SELECT @@tx_isolation;

修改事务隔离级别

set tx_isolation='read-committed';

mysql> set autocommit=off;

Query OK, 0 rows affected (0.00 sec)

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from event;

+--------+------------------+----+

| name   | value            | id |

+--------+------------------+----+

| nba    | i love this game |  1 |

| it     | baidu            |  2 |

| spring | spring in action |  3 |

| nba    | i am back        |  4 |

+--------+------------------+----+

4 rows in set (0.00 sec)

point A:

mysql> select * from event;

+--------+------------------+----+

| name   | value            | id |

+--------+------------------+----+

| nba    | i love this game |  1 |

| it     | baidu            |  2 |

| spring | spring in action |  3 |

| nba    | i am back        |  4 |

+--------+------------------+----+

4 rows in set (0.00 sec)

在point A的时刻,在另一个窗口执行下面的命令:

mysql> set autocommit=off;

Query OK, 0 rows affected (0.00 sec)

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from event;

+--------+------------------+----+

| name   | value            | id |

+--------+------------------+----+

| nba    | i love this game |  1 |

| it     | baidu            |  2 |

| spring | spring in action |  3 |

| nba    | i am back        |  4 |

+--------+------------------+----+

4 rows in set (0.00 sec)

mysql> insert into event values('tt','aaa',5);

Query OK, 1 row affected (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from event;

+--------+------------------+----+

| name   | value            | id |

+--------+------------------+----+

| nba    | i love this game |  1 |

| it     | baidu            |  2 |

| spring | spring in action |  3 |

| nba    | i am back        |  4 |

| tt     | aaa              |  5 |

+--------+------------------+----+

5 rows in set (0.00 sec)

可以看到在第二个窗口即时是提交了修改,在第一个窗口也依然看不到提交的数据。上面的查询是可以看见的,update是不可见的

mysql的客户端在连接超时端开后,对应的事务是不会提交或回滚的,依然还在,这个时候就会出现莫名其妙的锁定问题。

*************************** 2. row ***************************

                    trx_id: 8834

                 trx_state: RUNNING

               trx_started: 2016-06-22 12:09:15

     trx_requested_lock_id: NULL

          trx_wait_started: NULL

                trx_weight: 3

       trx_mysql_thread_id: 34

                 trx_query: NULL

       trx_operation_state: NULL

         trx_tables_in_use: 0

         trx_tables_locked: 0

          trx_lock_structs: 3

     trx_lock_memory_bytes: 1184

           trx_rows_locked: 13

         trx_rows_modified: 0

   trx_concurrency_tickets: 0

       trx_isolation_level: SERIALIZABLE

         trx_unique_checks: 1

    trx_foreign_key_checks: 1

trx_last_foreign_key_error: NULL

 trx_adaptive_hash_latched: 0

 trx_adaptive_hash_timeout: 10000

          trx_is_read_only: 0

trx_autocommit_non_locking: 0

*************************** 3. row ***************************

                    trx_id: 8833

                 trx_state: RUNNING

               trx_started: 2016-06-22 12:09:10

     trx_requested_lock_id: NULL

          trx_wait_started: NULL

                trx_weight: 2

       trx_mysql_thread_id: 35

                 trx_query: NULL

       trx_operation_state: NULL

         trx_tables_in_use: 0

         trx_tables_locked: 0

          trx_lock_structs: 2

     trx_lock_memory_bytes: 360

           trx_rows_locked: 13

         trx_rows_modified: 0

   trx_concurrency_tickets: 0

       trx_isolation_level: SERIALIZABLE

         trx_unique_checks: 1

    trx_foreign_key_checks: 1

trx_last_foreign_key_error: NULL

 trx_adaptive_hash_latched: 0

 trx_adaptive_hash_timeout: 10000

          trx_is_read_only: 0

trx_autocommit_non_locking: 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息