mysql - mysql 中的生产者/消费者表 - 缺少行

标签 mysql database

我有一个 mysql 表用作消息队列:

id | message_text

这是一张InnoDB表,id字段是一个自增整型字段。

生产者应用程序有多个执行插入操作的线程,例如:

insert into my_table(message_text) values('the text');

消费者应用程序每五秒运行一次。它选择 50 条记录,然后按行 ID 删除每条记录:

rows = select * from my_table limit 50;
for (row : rows) {
    delete from my_table where id = row.id;
}

消费者应用似乎看不到所有行。只有一个生产者应用程序实例在运行,它在单个线程中进行选择。生产者应用打印以控制它插入的所有消息,消费者应用也打印它处理的每一行,但缺少行。

我想因为我是通过行 ID 明确删除的,所以我不会遇到问题,但看起来我肯定是在某处删除了行。

谢谢

最佳答案

啊,这只是我犯的一个愚蠢的错误。我的初始代码测试(在 jdbc 中)在其中一个线程中关闭了自动提交,但我未能明确提交。这导致我认为某些行被丢弃了。

我可以确认此模式现在按预期工作。

关于mysql - mysql 中的生产者/消费者表 - 缺少行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593519/

相关文章:

ruby-on-rails - Rspec, cucumber : best speed database clean strategy

php - MYSQL - 从不同行获取值并将它们返回到同一行

mysql - 从日志表中为每个用户选择最后一个条目

MySql:为不同表中的每个现有行在新表中创建行

java - 在 Java 中连接到 MySQL 数据库时访问被拒绝

ruby-on-rails - Rails 将 txt 文件导入数据库

php - 在 SQL 或 PHP 中查询的结果操作?

mysql - 在一张表中创建两个外键

node.js - 如何在 Sequelize 中联系

mysql - 是否有将日期格式化为 YYYY、MM、DD 的 SQL 查询?