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

yinxiaoqi 2010-10-29 09:50:47
我用的是mysql 数据库,
表:table_sp

ID num name
1 1 主板

上面这个表有1条信息,我现在同时在线N个人去抢购这个物品,我想有个 判断 num数量 如果等于0 就代表该物品已经被抢购到了,如果通过程序判断,先查询table_sp这个表,查询出来num(数量)这个字段,在判断
if(num==0){
被抢购
}else{
没有被抢购
}
如果通过上面的方法,但是现在问题来了,同时在线人很多,很有可能2个人的时间是完全一样的,所以通过这样的判断就不可行了。所以应该在数据库 做下判断 ,大家帮帮忙啊。
...全文
64 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dawugui 的回复:]
mysql不知道,建议你去MYSQL版问。
[/Quote]

恩 ,好的,因为 sql版的朋友都非常的热情,所以我就直接来这了。呵呵。mysql都愁死我了,刚刚弄,不太明白。
SQLCenter 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yinxiaoqi 的回复:]

引用 2 楼 dawugui 的回复:
如果是sql server
declare @cnt as int
select @cnt = num from table_sp where id = 1
if @cnt = 0
...
else
...

如果是mysql就只有帮顶了。


我用的是mysql,
[/Quote]

SQL伪码,SQL不需要代码去锁表,UPDATE自然会锁,但写代码要改改:

update table_sp set num = num-1 where name='主板' and num > 0
if @@rowcount>0
begin
'被抢购'
end
else
begin
'没有被抢购'
end
dawugui 2010-10-29
  • 打赏
  • 举报
回复
mysql不知道,建议你去MYSQL版问。
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dawugui 的回复:]
引用 3 楼 yinxiaoqi 的回复:
引用 1 楼 sqlcenter 的回复:
锁表。


恩? 怎么锁表呢,大概说下呗,谢谢啦。


SQL code
1 如何锁一个表的某一行

A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tabl……
[/Quote]

mysql可以用吧,没有什么问题吧。
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
如果是sql server
declare @cnt as int
select @cnt = num from table_sp where id = 1
if @cnt = 0
...
else
...

如果是mysql就只有帮顶了。
[/Quote]

我用的是mysql,
dawugui 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yinxiaoqi 的回复:]
引用 1 楼 sqlcenter 的回复:
锁表。


恩? 怎么锁表呢,大概说下呗,谢谢啦。
[/Quote]
1 如何锁一个表的某一行

A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
yinxiaoqi 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sqlcenter 的回复:]
锁表。
[/Quote]

恩? 怎么锁表呢,大概说下呗,谢谢啦。
dawugui 2010-10-29
  • 打赏
  • 举报
回复
如果是sql server
declare @cnt as int
select @cnt = num from table_sp where id = 1
if @cnt = 0
...
else
...

如果是mysql就只有帮顶了。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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