PHP并发问题

ayayad 2011-08-29 06:08:30
打个比方:现在商城里就剩唯一的一件商品,卖完了就再也不会有了。
这时,有两个客户,在几乎相同的时间(假设相差无限接近0),提交了订单,要购买此商品。
那问题来了,这两份申请会被记录吗,还是只记录相对的前一份申请?
我理解是可能这两份申请都会被记录,因为服务器在接受前一份申请后还没来得及将数据库中的数量清0,下一份申请同样也能被执行。

我想请问,php有没有可以防止这一问题发生的机制??具体怎样实现,最好有个小案例什么的,呵
...全文
328 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayayad 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 phpnewnew 的回复:]
用phpadmin之类的图形界面看。不会的话就到mysql的后台输入 SHOW VARIABLES LIKE '%Engine%';
[/Quote]
谢了
黄袍披身 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ayayad 的回复:]

引用 6 楼 phpnewnew 的回复:
看看你数据库是不是 InnoDB 是的话 就啥也不用弄了.默认一般也是这个类型的.


我的mysql装好apache就有了,,怎么查看是不是InnoDB类型??怎么查看,在哪查看
[/Quote]

用phpadmin之类的图形界面看。不会的话就到mysql的后台输入 SHOW VARIABLES LIKE '%Engine%';
黄袍披身 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ayayad 的回复:]

当然是mysql数据库
写事务就能解决吗
写存储过程可以吗
各位说的具体点行不,,谢啦啊
[/Quote]
看看你数据库是不是 InnoDB 是的话 就啥也不用弄了.默认一般也是这个类型的.
ayayad 2011-08-30
  • 打赏
  • 举报
回复
当然是mysql数据库
写事务就能解决吗
写存储过程可以吗
各位说的具体点行不,,谢啦啊
jlzan1314 2011-08-30
  • 打赏
  • 举报
回复
如果是linux的话,使用flock()锁住,保证原子性.
ayayad 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 phpnewnew 的回复:]
看看你数据库是不是 InnoDB 是的话 就啥也不用弄了.默认一般也是这个类型的.
[/Quote]

我的mysql装好apache就有了,,怎么查看是不是InnoDB类型??怎么查看,在哪查看
黄袍披身 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 phpnewnew 的回复:]
看看你数据库是不是 InnoDB 是的话 就啥也不用弄了.默认一般也是这个类型的.
[/Quote]

当然这个只针对你的单条记录的写入更新。如果是多个更新需要一致的话 不用我说啦 当然要事务了.
helloyou0 2011-08-30
  • 打赏
  • 举报
回复
对,事务可以,

而对你这个情况,可能连事务都不需要,
因为如果就是一个update,只要在update后判断update是否有实际改动(检查affect_rows)即可,

如果你需要改动若干表而且要保持一致,就需要事务。

不建议自己lock表因为交给事物让数据库自己控制更安全高效。

存储过程并不能解决一致性问题,同样要通过事务。

PIGer920 2011-08-29
  • 打赏
  • 举报
回复
LOCK TABLES 进行操作
黄袍披身 2011-08-29
  • 打赏
  • 举报
回复
数据库问题,数据库一般都默认具备这样的功能,不过具体的看数据库的类型.具体的查看数据库的帮助
amani11 2011-08-29
  • 打赏
  • 举报
回复
一般这个并不由php来控制,

这是典型的数据库事务

根据你的数据库,你搜具体的用法好了,你的需求行级锁就可以了。。。access都支持事务
只要开心就好 2011-08-29
  • 打赏
  • 举报
回复
数据库有锁机制的。
你第一条sql去执行的时候,第二条sql不会同时执行的。
有先有后,这样的话,应该不会出现你担心的问题。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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