我的程序需要频频读取且更新某个字段,奇怪的是某此update set `col`=`col`+1之后,如果紧跟着一秒之内再查询该记录,发现结果并没有加1.
不得不怀疑,mysql是不是不会立刻执行update?或者执行update后并不立即写入硬盘?

解决方案 »

  1.   

    python:执行完更新之后,需要commit(),再从数据库中select应该就没问题了
      

  2.   

    肯定不会立即写入磁盘。 这个受操作系统的IO机制和MYSQL本身的机制决定。一般 数据库系统层,只有当缓冲区的脏数据到检查点或者没有空闲缓冲区的时候才会向操作系统申请将缓冲中的脏数据写加磁盘扇区并将缓冲区标记为可用。而操作系统同样使用类似机制以提高IO效率。
      

  3.   


    那就意味着,update和select操作即便是串行的,也会导致我上边说的问题吧?PS:好久不见版主了,顺便问好!我这个兼职二把刀管数据库的依然没有长进!:)
      

  4.   

    你的问题非常奇怪。 你的查询,MYSQL应该会直接到缓冲区中去取。 如果在缓冲区中有所需数据,则MYSQL不会进行磁盘IO操作,而是直接根据缓冲区内的数据进行操作。 你的问题好像是事务隔离相关的问题。 你的UPDATE操作是否提交? MYSQL事务隔离级别设置是什么?
      

  5.   


    表引擎是myisam,没有任何事务之类
      

  6.   


    谢谢,知道php也要类似的操作吗?