MySQL表锁定建议

时间:2015-03-09 14:06:16

标签: php mysql locking

我有一些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()); }

0 个答案:

没有答案