在一个原子操作中从InnoDB表中进行选择和截断的最佳方法是什么?

我想使用SELECT从InnoDB表中读取,然后在一个原子操作中使用TRUNCATE截断它,以便其他查询必须等待TRUNCATE操作完成才能修改表。最好的方法是什么?据我了解,只有隔离级别为SERIALIZABLE,事务才是原子的,并且表锁不允许TRUNCATE操作,因此必须以另一种方式实现原子性。

我正在使用PHP和MySQLi。默认隔离级别是可重复读取,因此我将其更改为SERIALIZABLE以使事务原子化:

$mysqli->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");

$mysqli->being_transaction();

// Select statements reading from `my_table`

$mysqli->query("TRUNCATE `my_table`");

$mysqli->commit();
评论