代码之家  ›  专栏  ›  技术社区  ›  Martin Konecny

MySQL锁定问题

  •  1
  • Martin Konecny  · 技术社区  · 14 年前

    我有类似于在线聊天客户端的东西。当一个用户发送消息时,它将存储在mysql数据库表中 id=currentID+1 . 我有另一个客户机长轮询,正在等待消息“id=currentid+1”。

    交换之后,该行将不再使用。

    这个箱子需要锁吗?我担心的是,读取PHP端将能够在写入PHP端完成行创建之前看到行并读取其值。

    3 回复  |  直到 14 年前
        1
  •  1
  •   ircmaxell    14 年前

    MySQL在完成读取之前不会使该行可用(对于myisam,它会自动获取表锁,对于innodb,它会自动获取行锁)。所以不,只要你只是在插入行(而不是稍后调用它的更新等),你就应该没事了……

        2
  •  0
  •   ryeguy    14 年前

    MySQL中的写入是原子的。其他查询在完全写入行之前无法“看到”该行,假定您使用的是 INSERT 这样做的声明。

        3
  •  0
  •   ovais.tariq    14 年前

    只有在插入新行后,select查询才会看到新行。

    插入是原子的

    是的,myisam执行表级锁定,而innodb执行行级锁定。

    而一个事务中的一组语句被认为是atmoic,在事务被提交之前,任何读取都看不到效果,u可以做一个 select shared 查看未提交的数据。