我有两个Python线程访问同一个MySQL数据库,每个线程都有自己的连接和游标对象。一个线程将一条记录插入到表中。正如我所期望的那样,在MySQL工作台中,在写入线程执行commit之前,我不会看到表的长度增长,然后我看到了变化。问题是,我的另一个线程看不到变化:它看到的是表的旧状态,就好像提交从未发生过一样。当我重新启动应用程序时,表的长度确实得到了正确的读取,但无论写入线程追加和提交了多少条记录,表的长度都会一直保持不变。我觉得我遗漏了一些很明显的东西。
为了读取表的长度,我尝试过: select count(*) from mystupidtable count( id ) from mystupidtable和even: select id from mystupidtable
所有这些尝试都返回表的旧状态,就好像提交从未发生过一样。
发布于 2015-06-30 01:07:43
听起来第二个线程运行的是它隐式打开事务时的数据库快照。(我认为光标是这样做的。)如果是这样的话,在第二个线程上提交光标应该允许它看到新数据。
请参阅https://dev.mysql.com/doc/refman/5.0/en/innodb-consistent-read.html和可重复读取级别。
https://stackoverflow.com/questions/31118611
复制相似问题