15.儲存過程生產環境應用綜合示例詳解
阿新 • • 發佈:2019-02-19
來源:網易雲課堂《精通MySQL儲存過程、函式和觸發器》課程
講師:huangxifeng607(黃錫峰)
筆記
(1)儲存過程需求分析
生產場景描述:
1.在遊戲中,每個賬號(accountid)可以最多5個角色(characterid)。角色表:t_game_character
2.5個角色放到一定的槽位(slot)中,槽位值必須是0-4,不能有相同的槽位,否則在遊戲中就無法正常看到所有角色。
3.兩個遊戲分割槽合服,合服之後每個賬號按規則刪除只剩下5個角色,但槽位值可能有重複的。
實現需求:同一個賬號有多個角色有重複槽位值,需要重置槽位值,使其值在0-4且不重複。
實現難點:有多個賬號accountid,多個賬號下又有多個角色。
多個賬號使用一個迴圈,每個賬號下多個角色又使用迴圈,即使用巢狀迴圈。
多個賬號使用遊標來實現,每個賬號下多個角色又使用巢狀遊標來實現。
create procedure procharslot() begin declare AID int; declare stopflag int default 0; declare curacc cursor for select accountid from reset_slot_accountid; declare continue handler for not found set stopflag=1; open curacc; repeat fetch curacc into aid; begin declare Cid int; declare CSlot int; declare done int default 0; declare CurChar cursor from select characterid from t_game_character where accountid=AID; declare continue handler for not found set done=1; set CSlot=0; open CurChar; fetch CurChar into Cid; while(done=0) do begin update t_game_character set CharSlot=CSlot where characterid=Cid; set CSlot=CSlot+1; fetch CurChar into Cid; end; end while; close CurChar; end; until stopflag=1 end repeat; close curacc; end;