mysql数据库,物品抢购的问题,大家进来看下哈!

yinxiaoqi 2010-10-29 10:04:27
我用的是mysql 数据库,
表:table_sp

ID num name
1 1 主板


上面这个表有1条信息,我现在同时在线N个人去抢购这个物品,我想有个 判断 num数量 如果等于0 就代表该物品已经被抢购到了,如果通过程序判断,先查询table_sp这个表,查询出来num(数量)这个字段,在判断
if(num==0){
被抢购
}else{
没有被抢购
}
如果通过上面的方法,但是现在问题来了,同时在线人很多,很有可能2个人的时间是完全一样的,所以通过这样的判断就不可行了。所以应该在数据库 做下判断 ,大家帮帮忙啊。
...全文
109 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldb2741 2010-10-29
  • 打赏
  • 举报
回复
这个要涉及到myslq的锁和事务回滚问题,请看我写的文章:http://blog.csdn.net/ldb2741/archive/2010/02/25/5325161.aspx
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wwwwb 的回复:]
FROM num:表名,非字段名
[/Quote]

我中午 的出去吃饭去了,回来我在联系你把。
zuoxingyu 2010-10-29
  • 打赏
  • 举报
回复
SELECT num FROM table_sp FOR UPDATE;

这样查询出来的,别人不能同时修改的。
rucypli 2010-10-29
  • 打赏
  • 举报
回复
show tables;
wwwwb 2010-10-29
  • 打赏
  • 举报
回复
FROM num:表名,非字段名
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wwwwb 的回复:]
你用
SELECT * FROM 列名 FOR UPDATE 试试
[/Quote]


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


报错了。
wwwwb 2010-10-29
  • 打赏
  • 举报
回复
你用
SELECT * FROM 列名 FOR UPDATE 试试
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复


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)



查询出啦了。
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwwb 的回复:]
show create table 表名
[/Quote]

查询的时候出现错误。



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

wwwwb 2010-10-29
  • 打赏
  • 举报
回复
show create table 表名
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
表什么引擎?
如果是InnoDB,加入FOR UPDATE,且必须在交易区块(BEGIN/COMMIT)中才能生效
[/Quote]

引擎?? 这个 怎么查看呢,我对mysql不是很熟悉,谢谢了。
wwwwb 2010-10-29
  • 打赏
  • 举报
回复
表什么引擎?
如果是InnoDB,加入FOR UPDATE,且必须在交易区块(BEGIN/COMMIT)中才能生效
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ldb2741 的回复:]
这个要涉及到myslq的锁和事务回滚问题,请看我写的文章:http://blog.csdn.net/ldb2741/archive/2010/02/25/5325161.aspx
[/Quote]

看了下12楼朋友推荐的文章,学到了 挺多的东西,谢谢哈。
ACMAIN_CHM 2010-10-29
  • 打赏
  • 举报
回复
用事务实现,仅用FOR UPDATE并不能完全保证。

建议看一下手册中关系事务的介绍。
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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