У меня возникла проблема, когда я использовал транзакцию ранее.Надеюсь, кто-нибудь может помочь мне разобраться.Я буду признателен за любую помощь.Спасибо.
Структура таблицы 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)
java метод:
// 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;
}
Вот что я сделал:
- выполнитьmethod1 () и break (установить точку останова в затмении) в D
- выполнить method2 () одновременно
Обратите внимание, что «someid» отсутствует в индексе, но оно хранит те же данныеточно так же, как и «id».
Тогда я ничего не получил, кроме ожидания, пока я не зафиксировал транзакцию1 или, в конце концов, время ожидания транзакции закончится.Но если я изменил условие where на id = 1 из F , все будет работать без каких-либо ожиданий.Здесь я запутался, потому что я не заблокировал эту таблицу или какие-либо строки.И если бы я сделал, это не должно быть сделано, верно?
Кто-нибудь может сказать мне, почему это произошло?Спасибо!