我有一个类似于在线聊天客户端的东西。当一个用户发送消息时,它将存储在带有id=currentID+1
的MySQL数据库表中。我有另一个客户端长轮询并等待消息'id = currentID + 1'。
在此次交换之后,该行永远不会再次使用。
在这种情况下我需要锁吗?我担心的是,在编写PHP端完成创建行之前,阅读PHP端将能够看到行并读取其值。
答案 0 :(得分:1)
MySQL在读完之前不会使该行可用(在MyISAM的情况下它会自动获取表锁,或者在INNODB的情况下自动获取行锁。所以不,你应该没问题,只要你'只重新插入行(后来不再调用它上面的更新等)......
答案 1 :(得分:0)
MySQL中的写入是原子的。其他查询在完全写入之前无法“看到”该行,假设您使用单个INSERT
语句执行此操作。
答案 2 :(得分:0)
只有插入后的select查询才能看到新行。
插入是原子的
并且是myisam使用表级锁定,而innodb则使用行级锁定。
事务中的和一组语句被认为是atmoic,在提交事务之前,任何读取都不会看到效果,你可以select shared
查看未提交的数据。