具有多个线程的事务和锁定

Transaction and Locking with multiple threads

本文关键字:事务 锁定 线程      更新时间:2023-10-16

Hi以下是问题场景:

我正在使用MYSQL(Innodb引擎(,我的一个应用程序(C++/MYSQLCAPI(正在进行以下操作:

启动交易

截断my_table

将Data infile加载到表my_table中

如果上述命令[truncate and load]都成功,则COMMIT

其他回滚

现在是另一个应用程序(C++/MYSQLCAPI(,它通过以下命令每秒读取此表。

从my_table中选择*

错误:在这次读取尝试中,有时它会得到0个数据,这可能是什么原因

CREATE TABLE new LIKE real;
load `new` by whatever means
if something went wrong, don't do the next two steps.
RENAME TABLE real TO old, new TO real;
DROP TABLE old;

这避免了您提到的问题,以及许多其他问题。特别是,它不需要特殊的交易处理;CCD_ 1是原子的并且非常快。

您看到的是一个空表,因为truncate表有一个隐式提交。如果您需要更改事务中的整个表,您可以使用delete然后insert,或者尝试此答案中提供的重命名解决方案