如题在学hibernate的时候,当只在业务中进行了flush,发现mysql 数据库中已经可以查到数据了(read uncommitted),看了隔离级别是repeatable-read,不知道是什么缘故?
设置的隔离级别
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.03 sec)
未提交查到的数据
mysql> select * from user1;
+----------------------------------+-------+----------+
------------------+
| id | name | password |
pireTime |
+----------------------------------+-------+----------+
------------------+
| 402880f127899c150127899d4b8e0001 | lishi | 123 |
10-03-23 14:02:17 |
+----------------------------------+-------+----------+
------------------+
1 row in set (0.00 sec)
设置的隔离级别
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.03 sec)
未提交查到的数据
mysql> select * from user1;
+----------------------------------+-------+----------+
------------------+
| id | name | password |
pireTime |
+----------------------------------+-------+----------+
------------------+
| 402880f127899c150127899d4b8e0001 | lishi | 123 |
10-03-23 14:02:17 |
+----------------------------------+-------+----------+
------------------+
1 row in set (0.00 sec)
数据库(隔离级别是可重复读)中就可以查到数据了
Hibernate: insert into User1 (name, password, createTime, expireTime) values (?, ?, ?, ?)
查看一下表结构是什么类型的。
`id` varchar(32) NOT NULL,
`name` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`createTime` datetime default NULL,
`expireTime` datetime default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
用的默认的引擎是myisam,查了下,是不支持事务的。http://www.ixdba.net/article/2f/2092$2.html对这篇文章上说的:
对不支持事务的表做start/commit操作没有任何效果,在执行commit前已经提交,测试:
执行一个msyql:
use test;
drop table if exists tn;
create table tn (a varchar(10)) type=myisam;
drop table if exists ty;
create table ty (a varchar(10)) type=innodb;begin;
insert into tn values('a');
insert into ty values('a');
select * from tn;
select * from ty;(1)
都能看到一条记录执行另一个mysql:(2)
use test;
select * from tn;
select * from ty;(3)
只有tn能看到一条记录
然后在另一边
commit;
才都能看到记录。(1)这条语句为什么已经可以查到数据了?不是还没提交么?照默认隔离级别是repeatable-read的话,不是应该是查不到的么?
(2)另一个mysql?要怎么样才能打开?我打开另一个dos窗口运行了,发现(3)也是有数据了。
PS:5楼(1)的问题,是innodb引擎的,是支持事务的。