У меня есть две таблицы:
CREATE TABLE table_a (
id SERIAL
);
CREATE TABLE table_b (
id SERIAL
);
Я хочу поменять таблицы и установить для auto_increment новой table_a значение MAX (id) +1 для table_b. Э.Г.
SELECT @A:=MAX(id) FROM table_a;
SET @qry = CONCAT('ALTER TABLE table_b AUTO_INCREMENT =', @A+1);
PREPARE stmt FROM @qry;
EXECUTE stmt;
RENAME TABLE table_a TO table_b_tmp, table_b TO table_a, table_b_tmp TO table_a;
К сожалению, я не могу ни заблокировать таблицы, ни сделать это в транзакции, поскольку RENAME TABLE не работает с заблокированной таблицей и ALTER TABLE неявно фиксирует.
Единственное решение, которое я могу придумать, чтобы избежать наложения идентификаторов, это установить auto_increment + 50, но так как этот процесс происходит часто, я бы предпочел, чтобы в моих идентификаторах не было множества дыр.
Есть идеи?