我之前使用事务时遇到了一些问题。希望有人能帮我弄清楚。我会很感激任何帮助。谢谢你。
MySql表结构:
create table test (
id int not null,
someid int,
name varchar(50),
update_date datetime
);
primary key : id (auto-inc)
index1 : id (unique)
index2 : id, update_date (non-unique)
爪哇方法:
// consider this method is Transaction 1
method1() {
A. set session transaction isolation level read commited;
B. select update_date from test where someid = 1;
C. insert into test values (some new data..);
D. select update_date from test where someid = 1;
}
// consider this method is Transaction 2
methodb() {
E. (start with default transaction isolation level - repeatable read)
F. update test set udpate_date = now() where someid = 1;
}
这是我所做的:
- 在 D 处执行 method1() 和 break(在 eclipse 中设置断点)
- 并发执行method2()
请注意,“someid”不在索引中,但它存储的数据与“id”完全相同。
然后我什么都没有,只要我不提交事务1,或者最终它会以事务超时结束。但是,如果我将 where 子句更改为 id = 1 of F,则无需等待即可正常工作。在这里我很困惑,因为我没有锁定该表或任何行。如果我这样做了,就不应该这样做,对吧?
谁能告诉我为什么会这样?谢谢!