请教高手关于事务隔离的问题
private static String url = "jdbc:mysql://localhost:3306/test";private static String username = "root";private static String password = "";public static Connection getConn() throws Exception {Class.forName("org.gjt.mm.mysql.Driver").newInstance();Connection con = DriverManager.getConnection(url , username , password);return con;}public static void demo3() throws Exception{ Connection con1 = getConn();con1.setAutoCommit(false);con1.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);//设置事务的隔离级别String sql1 = "Select * from employee where salary=1000";Statement stmt1 = con1.createStatement();ResultSet rs1 = stmt1.executeQuery(sql1);while(rs1.next()){System.out.print(rs1.getInt(1) + " ");System.out.print(rs1.getString(2) + " ");System.out.println(rs1.getString(3));}stmt1.close();Connection con2 = getConn();con2.setAutoCommit(false);String sql2 = "insert into employee(name,salary) values(\"gigi\",1000)";Statement stmt2 = con2.createStatement();stmt2.executeUpdate(sql2);con2.commit();stmt2.close();con2.close();System.out.println("===========================");Statement stmt11 = con1.createStatement();ResultSet rs11 = stmt11.executeQuery(sql1);while(rs11.next()){System.out.print(rs11.getInt(1) + " ");System.out.print(rs11.getString(2) + " ");System.out.println(rs11.getString(3));}stmt11.close();con1.commit();con1.close();}public static void main(String[] args) throws Exception {//demo1();//demo2();demo3();}实际打印结果为:
1 gigi 1000
===========================
1 gigi 1000
预期的结果应该是:
1 gigi 1000
===========================
1 gigi 1000
2 gigi 1000
请高手 帮我看看这个代码.为啥隔离级别设置成ISOLATION_REPEATABLE_READ了,却不能幻像读
按照文档
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ 都是应该允许幻像读的
我用的是 mysql 的 InnoDB 存储引擎 .文档上说支持4个标准的事务隔离