查询数据库隔离级别:
select @@transaction_isolation;
mysql> select @@transaction_isolation;不同mysql版本查询语句不同(select @@tx_isolation;)
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ |
+-------------------------+
1 row in set (0.00 sec)
数据库默认隔离级别为可重复读,可避免脏读和不可重复读,但是解决不了幻读的问题,但是一般情况下可重复读这个隔离级别已经可以避免大多数问题了,不用将隔离级别设为最高。
修改隔离级别:
set session transaction isolation level read uncommitted;
mysql> set session transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| READ-UNCOMMITTED |
+-------------------------+
1 row in set (0.00 sec)
事务隔离级别成功修改为读未提交
另:在启动事务前要先确认数据库的引擎是否支持事务
查询数据库支持的引擎:
show engines \G;
查询数据库使用的引擎,即默认引擎:
show variables like '%storage_engine%';
mysql> show variables like '%storage_engine%';
+----------------------------------+-----------+
| Variable_name | Value |
+----------------------------------+-----------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_disk_storage_engine | InnoDB |
| internal_tmp_mem_storage_engine | TempTable |
+----------------------------------+-----------+
5 rows in set, 1 warning (0.14 sec)
可以看出正在使用的引擎为InnoDB,InnoDB和BDB是支持事务的,其他例如MyISAM是不支持事务功能的,所以事务的rollback之类的命令不能生效。数据无法回滚。