Нет, MySQL не имеет разных «уровней» транзакций в сеансе. Всего одна текущая транзакция и COMMIT или ROLLBACK влияют на всю транзакцию.
Я думаю, что мы можем открыть два соединения с MySQL одновременно. Для этого не требуется пул соединений. (Пул соединений был бы хорош по другим причинам).
conn1 = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")
conn2 = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")
Если мы получим два соединения, то мы сможем выполнять транзакции независимо для каждого соединения
,
Но это, вероятно, не сработает для вашего варианта использования. Предполагая, что InnoDB, если строка, вставленная в первое соединение, является «самым высоким» значением в ключе кластера, InnoDB передает исключительную блокировку индекса до конца индекса, не позволяя другим сеансам выполнять вставки с более высокими значениями в ключе кластера. (Второй сеанс будет блокироваться до тех пор, пока не будут получены требуемые блокировки; этого не произойдет, пока сеанс, удерживающий монопольную блокировку, не снимет его с помощью либо ROLLBACK, либо COMMIT.)
И проблема блокировки распространяется на все индексы, а не только на ключ кластера.
Пул соединений не решит эту проблему.
Исключительные замки, на которые я ссылаюсь, это "разрывные замки". Нам пришлось бы обходить блокировку, если мы выполняем вставки в одну и ту же таблицу, чтобы избежать блокировок, ожидая блокировок, когда эти блокировки удерживаются сеансом, управляемым нашей программой.
https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_gap_lock
https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html