Как я могу заблокировать таблицу InnoDB, чтобы предотвратить обновления во время копирования этой таблицы?

Я хотел бы временно заблокировать таблицу, чтобы другие параллельные процессы не могли внести в нее изменения. Причиной этого является то, что эта таблица будет скопирована во временную таблицу, изменена, а затем скопирована обратно (а оригинал фактически удален, а новая таблица переименована). Затем, после того, как все это будет завершено, я хочу разблокировать таблицу и, надеюсь, что-нибудь предпринялось во время возобновления блокировки.

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

Вот то, что я пытался, но это не такПохоже на работу.

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);

$mysqli->autocommit(false)

// create a table to hold parts to keep
$q1 = "CREATE TABLE new_table LIKE my_table;";
$res1 = $mysqli ->query($q1);       

// Lock table to avoid concurrent update issues
$q2 = "LOCK TABLE my_table WRITE;";
$res2 = $mysqli ->query($q2);           

// Insert data to keep into new table   
$q3 = "INSERT INTO new_table SELECT * FROM my_table WHERE some_id IN (SELECT ID FROM table2)";
$res3 = $mysqli ->query($q3);

// drop original table
$q4 = "DROP TABLE my_table;";
$res4 = $mysqli ->query($q4);

// rename new table
$q5 = "RENAME TABLE new_table TO my_table;";
$res5 = $mysqli ->query($q5);

$mysqli ->commit(); // commit changes and re-enable autocommit

$q = "UNLOCK TABLES;";
$res = $mysqli ->query($q); 

Чтобы проверить, используя PHPmyadmin, ямы выпустили "SET AUTOCOMMIT = 0; LOCK TABLE my_table WRITE; " запрос, а затем попытался удалить что-то из my_table, и я смог это сделать. Я хочу заблокировать это. Кроме того, после выполнения оператора блокировки остальная часть процедуры завершается сбоем и ничего не изменяется. "

Ответы на вопрос(1)

Ваш ответ на вопрос