打个比方:现在商城里就剩唯一的一件商品,卖完了就再也不会有了。
这时,有两个客户,在几乎相同的时间(假设相差无限接近0),提交了订单,要购买此商品。
那问题来了,这两份申请会被记录吗,还是只记录相对的前一份申请?
我理解是可能这两份申请都会被记录,因为服务器在接受前一份申请后还没来得及将数据库中的数量清0,下一份申请同样也能被执行。我想请问,php有没有可以防止这一问题发生的机制??具体怎样实现,最好有个小案例什么的,呵

解决方案 »

  1.   

    数据库有锁机制的。
    你第一条sql去执行的时候,第二条sql不会同时执行的。
    有先有后,这样的话,应该不会出现你担心的问题。
      

  2.   

    一般这个并不由php来控制,这是典型的数据库事务根据你的数据库,你搜具体的用法好了,你的需求行级锁就可以了access都支持事务
      

  3.   

    LOCK TABLES 进行操作
      

  4.   

    当然是mysql数据库
    写事务就能解决吗
    写存储过程可以吗
    各位说的具体点行不,,谢啦啊
      

  5.   

    看看你数据库是不是 InnoDB 是的话 就啥也不用弄了.默认一般也是这个类型的.
      

  6.   

    对,事务可以,而对你这个情况,可能连事务都不需要,
    因为如果就是一个update,只要在update后判断update是否有实际改动(检查affect_rows)即可,如果你需要改动若干表而且要保持一致,就需要事务。不建议自己lock表因为交给事物让数据库自己控制更安全高效。存储过程并不能解决一致性问题,同样要通过事务。
      

  7.   


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

  8.   

    如果是linux的话,使用flock()锁住,保证原子性.
      

  9.   


    用phpadmin之类的图形界面看。不会的话就到mysql的后台输入 SHOW VARIABLES LIKE '%Engine%';