Консультации по блокировке таблиц MySQL

У меня есть несколько таблиц MySQL (в первую очередь InnoDB и некоторые движки MyISAM), которые могут быть обновлены только путем усечения, а затем вставки данных. Я должен усечь данные, потому что у меня нет хорошего способа определить, какие данные могли быть удалены с момента последней синхронизации.

Моя проблема в том, что во время этого процесса возможно, что недостающие данные могут быть представлены пользователю. Как правило, эти таблицы маленькие, поэтому они должны быть заполнены в течение нескольких секунд самое большее. Должен ли я заблокировать таблицу перед усечением и разблокировать после повторной вставки данных? Если да, то как мне это сделать? И есть ли потенциальные подводные камни для этого метода?

Вот предложенный пример:

try {
$this->db_connection->beginTransaction();

$this->db_connection->query('LOCK TABLES my_table READ');

$this->db_connection->query('TRUNCATE TABLE my_table');

$this->db_connection->query('INSERT INTO my_table ...');

$this->db_connection->query('UNLOCK TABLES');

$this->db_connection->commit();

} catch (PDOException $ e) {
$ This-> db_connection-> RollBack ();
logError ('Необработанное исключение:'. $ e-> getMessage (). 'в файле'. $ e-> getFile (). 'on line'. $ e-> getLine ());
}
[/ NOEDIT]

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет ...

По вопросам рекламы [email protected]