mysql查询偶尔会遗漏一些行

时间:2015-10-26 13:45:56

标签: mysql

我遇到了这个问题,这是我的sql语句:

select * from tb1 where id > the_max_read order by id

tb1 用于监控其他表的更改,因此会不断增长。
变量 the_max_read 是程序已读取的最大ID 我正在通过C ++运行这个sql并使用mysql的mysql_query函数,并使用mysql_store_result保存结果。
数据库引擎 innodb

问题是它有时会错过某些行,并不总是会继续发生。

例如,假设我有这张表:

|   -- id | -- name|  
| 834370  |  name1 |  
| 834371  |  name2 |  
| 834372  |  name3 |  
| 834373  |  name4 |  
| 834374  |  name5 |  
| 834375  |  name6 |

the_max_read = 834371 ,运行上面的sql时,结果仅包含834374和834375

虽然这个表可能会被其他程序插入一些新行,但我仍然无法理解为什么它只是错过了一些行,它几乎是最简单的sql。

1 个答案:

答案 0 :(得分:0)

这听起来像是一个交易问题,您可以在提交某些交易之前阅读。

尝试阅读未提交的数据:http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html

e.g。

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
select * from tb1 where id > the_max_read order by id;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

希望有所帮助。