mysql默认隔离级别测试
2015-03-09 19:10
99 查看
mysql的默认的隔离级别是可重复读,oracle的默认的隔离级别是读提交,下面是mysql的隔离级别的测试:
查看mysql的事务隔离级别
修改事务隔离级别
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
查看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
相关文章推荐
- 修改MySQL默认最大连接数
- 切换JBOSS默认数据库到MySQL
- 修改MySQL的默认密码
- 更改MySQL默认存储目录
- Mysql默认设置的危险性
- 更改MySQL默认字符集
- mysql 默认ip处理函数
- MySQL服务器默认安装之后如何调节性能?
- linux下mysql的默认字符集修改和默认数据库引擎的修改
- MySQL 将默认编码改为gb2312的几个步骤
- MYSQL中取默认时间为当前时间
- ubuntu下更改mysql默认编码(字符集)
- 解决delphi2007下dbexpress连mysql5时中文显示乱码(文中有可连非默认端口的方法)
- 在MYSQL 自增,默认值,时间默认字段
- 将ecm的默认数据库改为mysql
- SQlyog是mySQl的UGI版,默认情况下中文显示会出现乱码
- 修改Linux下mysql 5.0.xx默认连接数
- linux 下配置mysql 的默认字符集(character-set)
- Mysql默认设置的危险性分析第1/2页
- Mysql默认设置的危险性分析第1/2页