Как я могу заставить мои транзакции ждать, если в MySQL все еще есть транзакция без привязки/отказа от рулона?Подождите, пока другая транзакция совершит/откат до начала другой транзакции?
В настоящее время я делаю операции на стороне коды, а не на DB сохраняемой стороны процессуальной, как это:
cmd.Connection.BeginTransaction();
try {
// db codes here
cmd.Transaction.Commit();
} catch {
cmd.Transaction.Rollback();
throw;
} finally {
cmd.Connection.Close();
}
Я хочу для других сделок ждать, пока предыдущая транзакция не будет завершена. Поскольку в некоторых моих хранимых процедурах я получаю MAX(id)
при вставке для внешних ключей, где id
является автоинкрементным столбцом, который также создается в той же транзакции. Но это не работает на моей текущей настройки выше, когда 2 сделки происходят в то же самое время, что произошло, как это:
Begin Trans1
Begin Trans2
Trans1: insert a values(); --id = 1
Trans2: insert a values(); --id = 1
Trans1: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 1
Trans2: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 1
Commit Trans1
Commit Trans2 --id = 2, aid = 1
То, что я надеялся, что это так:
Begin Trans1
Wait Trans2
Trans1: insert a values(); --id = 1
Trans1: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 1
Commit Trans1
Begin Trans2
Trans2: insert a values(); --id = 2
Trans2: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 2
Commit Trans2
Является ли это возможно подобное?
я редактировал свой пост проверить, поможет ли это в вашем случае – Anuj