問題:我有兩張表,一張是優惠券活動表,另一個是用戶領取優惠券的明細表。如下CREATETABLE`coupon_activity`(`act_id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主鍵',`act_code`char(6)NOTNULLDEFAULT''COMMENT'活動編碼',`coup_issue_num`int(11)NOTNULLDEFAULT'0'COMMENT'優惠券發行量',`coup_per_num`int(11)NOTNULLDEFAULT'0'COMMENT'單個用戶可領取數',PRIMARYKEY(`act_id`),UNIQUEKEY`act_code_idx`(`act_code`)COMMENT'活動編碼唯一索引')ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='優惠券活動表';CREATETABLE`coupon_detail`(`coup_id`int(11)NOTNULLAUTO_INCREMENT,`act_code`char(6)NOTNULLDEFAULT''COMMENT'活動編號',`coup_code`char(6)NOTNULLDEFAULT''COMMENT'優惠券編碼',`coup_user_id`int(11)NOTNULLDEFAULT'0'COMMENT'領取券用戶id',PRIMARYKEY(`coup_id`),UNIQUEKEY`coup_code_idx`(`coup_code`)USINGBTREECOMMENT'優惠券編碼唯一索引',KEY`coup_user_idx`(`coup_user_id`)USINGBTREECOMMENT'用戶id普通索引',KEY`act_code_idx`(`act_code`)USINGBTREECOMMENT'活動編碼普通索引')ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='優惠券明細表';假如現在有一個編碼為act_code='000000'的優惠券活動,限定的沒每個人只能領一張券,現在用戶id=10的用戶來領取該活動的券,在不考慮并發時的代碼如下(#{}里面的字段表示前面的sql語句查出來的值):begin;select*fromcoupon_activitywhereact_code='000000';//當前10號用戶領取該活動優惠券的數量selectcount(coup_id)ascount_perfromcoupon_detailwherecoup_user_id=10andact_code=#{act_code};//插入明細表當前用戶領取量是否小于每個用戶可領取數if(#{count_per}
mysql insert 并發問題
HUX布斯
2019-04-14 11:28:45
