Есть таблица t1 типа
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id));
в нее нужно добалять записи.
И есть таблица t2 типа(max_id
CREATE TABLE t2 (max_id INT);
которая содержит только одну запись - максимальный id в таблице t1.
Структуру таблиц и принцип работы менять нельзя.
Задача: написать запрос атомарно добаляющий одну запись в таблицу t1
и изменяющий запись в таблице t2. Что то типа того:
BEGIN;
INSERT INTO t1 (id) VALUES (null);
UPDATE t2 SET max_id=LAST_INSERT_ID();
COMMIT;
В случае если проходят две параллельных транзакции, первая выполнила begin/insert, тут полностью отработала вторая и первая выполнила update/commit, то таблица t2 будет содержать не максимальный id.
Вопрос как это можно побороть ?!!
С LOCK TABLES ничерта не получается, если до begin заблокировать таблицу t2, то такое впечатление что begin снимает блокировку...