我用的是mysql 数据库,
表:table_spID   num    name
1     1     主板
上面这个表有1条信息,我现在同时在线N个人去抢购这个物品,我想有个 判断 num数量 如果等于0 就代表该物品已经被抢购到了,如果通过程序判断,先查询table_sp这个表,查询出来num(数量)这个字段,在判断
if(num==0){
被抢购
}else{
没有被抢购
}
如果通过上面的方法,但是现在问题来了,同时在线人很多,很有可能2个人的时间是完全一样的,所以通过这样的判断就不可行了。所以应该在数据库 做下判断 ,大家帮帮忙啊。

解决方案 »

  1.   

    表什么引擎?
    如果是InnoDB,加入FOR UPDATE,且必须在交易区块(BEGIN/COMMIT)中才能生效
      

  2.   


    引擎?? 这个 怎么查看呢,我对mysql不是很熟悉,谢谢了。
      

  3.   

    show create table 表名
      

  4.   


    查询的时候出现错误。ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
    corresponds to your MySQL server version for the right syntax to use near 'SHOW
    CREATE TABLE test' at line 2
      

  5.   

    mysql> show create table test ;
    +-------+-----------------------------------------------------------------------
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    ------------+
    | Table | Create Table
                |
    +-------+-----------------------------------------------------------------------
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    ------------+
    | test  | CREATE TABLE `test` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) CHARACTER SET gb2312 NOT NULL,
      `sex` varchar(2) CHARACTER SET gb2312 NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 |
    +-------+-----------------------------------------------------------------------
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    ------------+
    1 row in set (0.13 sec)查询出啦了。
      

  6.   

    你用
    SELECT * FROM 列名 FOR UPDATE 试试
      

  7.   

    mysql> SELECT * FROM num FOR UPDATE ;
    ERROR 1146 (42S02): Table 'test.num' doesn't exist
    报错了。
      

  8.   

    SELECT num FROM table_sp FOR UPDATE;这样查询出来的,别人不能同时修改的。
      

  9.   

    这个要涉及到myslq的锁和事务回滚问题,请看我写的文章:http://blog.csdn.net/ldb2741/archive/2010/02/25/5325161.aspx
      

  10.   

    用事务实现,仅用FOR UPDATE并不能完全保证。建议看一下手册中关系事务的介绍。
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html