我有一些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('Unhandled Exception: '.$e->getMessage().' in file '.$e->getFile().' on line '.$e->getLine());
}