mysql 更新一条记录不是立刻存进去吗?

netxuning 2011-12-01 09:10:26
我的程序需要频频读取且更新某个字段,奇怪的是某此update set `col`=`col`+1之后,如果紧跟着一秒之内再查询该记录,发现结果并没有加1.
不得不怀疑,mysql是不是不会立刻执行update?或者执行update后并不立即写入硬盘?
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
沉沦 2011-12-02
  • 打赏
  • 举报
回复
隔离级别的问题吧。。
a4742715 2011-12-01
  • 打赏
  • 举报
回复
局域网局域网局域网局域网
ACMAIN_CHM 2011-12-01
  • 打赏
  • 举报
回复
你的问题非常奇怪。 你的查询,MYSQL应该会直接到缓冲区中去取。 如果在缓冲区中有所需数据,则MYSQL不会进行磁盘IO操作,而是直接根据缓冲区内的数据进行操作。 你的问题好像是事务隔离相关的问题。 你的UPDATE操作是否提交? MYSQL事务隔离级别设置是什么?
netxuning 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]

肯定不会立即写入磁盘。 这个受操作系统的IO机制和MYSQL本身的机制决定。

一般 数据库系统层,只有当缓冲区的脏数据到检查点或者没有空闲缓冲区的时候才会向操作系统申请将缓冲中的脏数据写加磁盘扇区并将缓冲区标记为可用。

而操作系统同样使用类似机制以提高IO效率。
[/Quote]

那就意味着,update和select操作即便是串行的,也会导致我上边说的问题吧?

PS:好久不见版主了,顺便问好!我这个兼职二把刀管数据库的依然没有长进!:)
ACMAIN_CHM 2011-12-01
  • 打赏
  • 举报
回复
肯定不会立即写入磁盘。 这个受操作系统的IO机制和MYSQL本身的机制决定。

一般 数据库系统层,只有当缓冲区的脏数据到检查点或者没有空闲缓冲区的时候才会向操作系统申请将缓冲中的脏数据写加磁盘扇区并将缓冲区标记为可用。

而操作系统同样使用类似机制以提高IO效率。
jiaweiqq123 2011-12-01
  • 打赏
  • 举报
回复
python:执行完更新之后,需要commit(),再从数据库中select应该就没问题了
yangxiao_jiang 2011-12-01
  • 打赏
  • 举报
回复
这个应该是程序缓存的问题。
netxuning 2011-12-01
  • 打赏
  • 举报
回复
嗯,可能我太武断了,继续查查
rucypli 2011-12-01
  • 打赏
  • 举报
回复
你可以用客户端试试 如果没问题就是你程序的问题了
ACMAIN_CHM 2011-12-01
  • 打赏
  • 举报
回复
感觉是你程序方面的原因, 代码是什么,怎样进行读取更新操作的?
netxuning 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiaweiqq123 的回复:]

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

谢谢,知道php也要类似的操作吗?
netxuning 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acmain_chm 的回复:]

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

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

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧