MySQL锁定问题

时间:2010-05-21 17:12:02

标签: php mysql locking

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

在此次交换之后,该行永远不会再次使用。

在这种情况下我需要锁吗?我担心的是,在编写PHP端完成创建行之前,阅读PHP端将能够看到行并读取其值。

3 个答案:

答案 0 :(得分:1)

MySQL在读完之前不会使该行可用(在MyISAM的情况下它会自动获取表锁,或者在INNODB的情况下自动获取行锁。所以不,你应该没问题,只要你'只重新插入行(后来不再调用它上面的更新等)......

答案 1 :(得分:0)

MySQL中的写入是原子的。其他查询在完全写入之前无法“看到”该行,假设您使用单个INSERT语句执行此操作。

答案 2 :(得分:0)

只有插入后的select查询才能看到新行。

插入是原子的

并且是myisam使用表级锁定,而innodb则使用行级锁定。

事务中的

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