我遇到了这个问题,这是我的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。
答案 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;
希望有所帮助。