如题所述
ãã主è¦è§£å³æ¹æ³ï¼
ãã1.éè¦æå®ä½åºå¯¹åºçä¼æ å¸æ°é以记å½çå½¢å¼åç°ï¼è¡¨1ï¼Max_Table( ID, storeID,apply_count ,apply_code)ã表2ï¼apply_form(apply_code,store_id,phone_numbe)该表主è¦è®°å½åªä¸ªç¨æ·ç¨ä»ä¹ææºå·ç ç³è¯·äºä¼æ å¸ï¼ä¼æ å¸ç æ¯ä»ä¹ã
ãã2.å建æ°æ®åºæ¶è¦ä½¿ç¨InnoDBåå¨å¼æ
ãã3.å¨æ°æ®åºä¸å建åå¨è¿ç¨ï¼å¨åå¨è¿ç¨ä¸ä½¿ç¨äºå¡ï¼å¨äºå¡ä¸è¦å æ¥è¯¢æ¯å¦åæ¾å®æ¯ï¼ä¸ºé¿å å¤è¿ç¨åæ¶è®¿é®æè®°å½ä¸çæ°éèå¼èµ·çé®é¢ï¼æ使ç¨for updateã使ç¨è¯¥è¯å¥ï¼è¥äºå¡A访é®è®¿é®è¯¥è®°å½æ¶ï¼äºå¡Bä¼é»å¡ï¼ç´å°äºå¡Aå®æ¯åï¼ä»èè¾¾å°äº<并转串>çæä½ã
ãã以ä¸æ¯è§£å³è¯¥é®é¢çæ ¸å¿åå¨è¿ç¨ï¼å ¶ä¸æ2ä¸ªå ¥åï¼1个åºåã
ããCREATE DEFINER=`sa`@`localhost` PROCEDURE `p_apply_code`(IN `p_store_id` varchar(30), IN `p_phone_number` varchar(20),OUT return_val varchar(30))
BEGIN
#Routine body goes here...
declare p_apply_count int(4) default 0;
declare encode_apply_code varchar(16) default '';
start transaction ;//å¼å§äºå¡
SELECT apply_count into p_apply_count FROM max_table WHERE store_id=p_store_id for update;
if (p_apply_count =0 ) THEN
insert into max_table(store_id,apply_count) values(p_store_id,0);
end if;
IF( p_apply_count<=9) THEN
set encode_apply_code='ä¼æ å¸ç ççæè§å',
insert into apply_form(apply_code,store_id,phone_number) values(encode_apply_code,p_store_id,p_phone_number);
update max_table set apply_count=apply_count+1 where store_id=p_store_id;
set result=encode_apply_code2;
END IF;
set return_val=result ;
commit; //æ交äºå¡ï¼åæ¶éæ¾for updateé
END
4.PHPè°ç¨MySQLåå¨è¿ç¨
$sql = 'call p_apply_code('."'$store_id',"."'$phonenumber',"."@return_val".'); ';
$db->query($sql);
$apply_code=$db->getOne('select @return_val');
ãã1.éè¦æå®ä½åºå¯¹åºçä¼æ å¸æ°é以记å½çå½¢å¼åç°ï¼è¡¨1ï¼Max_Table( ID, storeID,apply_count ,apply_code)ã表2ï¼apply_form(apply_code,store_id,phone_numbe)该表主è¦è®°å½åªä¸ªç¨æ·ç¨ä»ä¹ææºå·ç ç³è¯·äºä¼æ å¸ï¼ä¼æ å¸ç æ¯ä»ä¹ã
ãã2.å建æ°æ®åºæ¶è¦ä½¿ç¨InnoDBåå¨å¼æ
ãã3.å¨æ°æ®åºä¸å建åå¨è¿ç¨ï¼å¨åå¨è¿ç¨ä¸ä½¿ç¨äºå¡ï¼å¨äºå¡ä¸è¦å æ¥è¯¢æ¯å¦åæ¾å®æ¯ï¼ä¸ºé¿å å¤è¿ç¨åæ¶è®¿é®æè®°å½ä¸çæ°éèå¼èµ·çé®é¢ï¼æ使ç¨for updateã使ç¨è¯¥è¯å¥ï¼è¥äºå¡A访é®è®¿é®è¯¥è®°å½æ¶ï¼äºå¡Bä¼é»å¡ï¼ç´å°äºå¡Aå®æ¯åï¼ä»èè¾¾å°äº<并转串>çæä½ã
ãã以ä¸æ¯è§£å³è¯¥é®é¢çæ ¸å¿åå¨è¿ç¨ï¼å ¶ä¸æ2ä¸ªå ¥åï¼1个åºåã
ããCREATE DEFINER=`sa`@`localhost` PROCEDURE `p_apply_code`(IN `p_store_id` varchar(30), IN `p_phone_number` varchar(20),OUT return_val varchar(30))
BEGIN
#Routine body goes here...
declare p_apply_count int(4) default 0;
declare encode_apply_code varchar(16) default '';
start transaction ;//å¼å§äºå¡
SELECT apply_count into p_apply_count FROM max_table WHERE store_id=p_store_id for update;
if (p_apply_count =0 ) THEN
insert into max_table(store_id,apply_count) values(p_store_id,0);
end if;
IF( p_apply_count<=9) THEN
set encode_apply_code='ä¼æ å¸ç ççæè§å',
insert into apply_form(apply_code,store_id,phone_number) values(encode_apply_code,p_store_id,p_phone_number);
update max_table set apply_count=apply_count+1 where store_id=p_store_id;
set result=encode_apply_code2;
END IF;
set return_val=result ;
commit; //æ交äºå¡ï¼åæ¶éæ¾for updateé
END
4.PHPè°ç¨MySQLåå¨è¿ç¨
$sql = 'call p_apply_code('."'$store_id',"."'$phonenumber',"."@return_val".'); ';
$db->query($sql);
$apply_code=$db->getOne('select @return_val');
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-05-21
说的是秒杀功能把, 最简单方法 数据库定义个字段控制 可设定数字 购买成功一次(交易成功代码段里 给该字段数字-1 0则空了。) 至于F码什么的 也可用此方法 一个字段记录 密匙 事先生成 用MD5 或者时间+字母随机都可以 自己定义 购买前匹配该密匙 正确则购买 使用后改变该字段值就行。追问
如果卖10W台手机,有100W人在抢,怎么判断谁抢到了
追答这就要看网速了 还要看你服务器要能承受的住瞬间访问量 只要数据库不崩溃 定义秒杀商品数量10W 一直递减就行 其他程序就跟普通购买商品流程一样 只是多了个限制10W 抢到的人就是购买商品成功的!
追问不明觉厉啊
追答是一种思路 多接触接触数据库 你就懂了- -。。
本回答被提问者采纳