2015-09-09 2 views
0

Мне нужна помощь при понимании результирующего поведения параллельных транзакций, обновляющих ту же строку базы данных.Многократные транзакции MySQL, увеличивающие ту же строку

База данных: MySQL

Сценарий: 1) сделка A будет обновлять строку (1,2,3) 2) Транзакция B будет обновлять строку (1,3,4)

Поскольку оба сделок выполняются параллельно, в режиме автоматической фиксации будет ли конечное состояние (для строк 1 и 3) отражать изменения, сделанные как A, так и B, или существует вероятность потери данных.

Также будет ли изменен ответ, если транзакции просто увеличивают количество записей данных?

+0

Вы используете MyISAM или InnoDB в своей базе данных MySQL? –

+0

Я еще не решил. Есть ли тот, который я предпочел бы над другим? Я хочу, чтобы несколько потоков обновляли несколько строк, как упоминалось выше. @TimBiegeleisen – user1855193

+0

Согласно [этому сообщению SO] (http://stackoverflow.com/questions/1195858/how-to-deal-with-concurrent-updates-in-databases), который, по общему признанию, несколько лет, MyISAM делает не поддерживает транзакции, но InnoDB делает. –

ответ

0

Если обе транзакции обновляют одну и ту же строку, вторая транзакция будет заблокирована до тех пор, пока первая транзакция не будет отменена или не будет выполнена. Другими словами, транзакции не будут выполняться параллельно в конце.

Это действительно зависит от уровня изоляции, см., Например, http://developer.mimer.com/documentation/latest_jdbcguide_html/programming.html.

+0

Спасибо @Zbynek. Быстрый последующий вопрос. Если я использую уровень изоляции транзакций сериализуемым, в этом случае я могу вызвать тупик db, если обновления Tx A (1,2,3) и Tx B (2,1,4)? – user1855193

+0

Тупик в целом вызван блокировкой (по крайней мере) двух ресурсов в противоположном порядке (в простейшем случае). Например. когда TxA обновляет строку1, TxB обновляет строку2, а затем TxA пытается обновить строки2 и TxB пытается обновить строку1. Итак, если какая-либо из транзакций обновляет только одну строку и совершает транзакции, она не может вызвать тупик. –

+0

Спасибо @Zbneyk. Тем не менее, я использую режим автоматической фиксации. Итак, в случае, если две транзакции будут обновлять два ресурса в разном порядке, это может иметь тупик? Я думаю, да, но просто хочу дважды проверить. – user1855193

Смежные вопросы