mysql insert after 觸發器,遊標遍歷執行邏輯

項目需求: 註冊的新用戶根據不同的賬戶,往另一個表插入一條賬戶信息
delimiter //
CREATE TRIGGER register_add_account  AFTER INSERT ON user
       FOR EACH ROW
       BEGIN
            DECLARE prd_symbol varchar(30);
			DECLARE done int default 0;/*判斷循環是否關閉的標誌位*/
			DECLARE result CURSOR FOR SELECT symbol FROM coin;/*遊標*/
			
		    DECLARE continue handler for not found set done = 1; /*定義異常處理 */
		    
		    /*插入user_asset表一條數據*/
			insert into user_asset(`user_id`,`unique_id`) values(NEW.id,NEW.unique_id);
			
		    OPEN result;/*打開result 遊標*/
		    
		    flag_loop:loop  /*遍歷result 遊標*/
		         
		    FETCH result into prd_symbol;/*把遊標的數據賦給變量*/ 
		        if done = 1 then leave flag_loop;end if;
		
				insert into user_coin(`user_id`,`unique_id`,`symbol`) values(NEW.id,NEW.unique_id,prd_symbol);
				insert into user_contract_coin(`user_id`,`unique_id`,`symbol`) values(NEW.id,NEW.unique_id,prd_symbol);
				end loop; /*結束循環*/
				close result; /*關閉遊標*/
       END;//
delimiter ;
針對字段剖析:
  1. register_add_account 觸發器的自定義名稱
  2. after 在…之後 共兩個操作(before,after)
  3. insert 表示用來監聽更新語句的操作 共三個操作(insert,update,delete)
  4. user 表名
  5. for each row 針對每條插入數據都有效
  6. NEW 表示insert操作插入的數據
  7. CURSOR FOR

遊標聲明: DECLARE cursor_name CURSOR FOR select_statement
遊標OPEN語句: OPEN cursor_name 這個語句打開先前聲明的遊標
遊標FETCH語句: FETCH cursor_name INTO var_name [, var_name] …這個語句用指定的打開遊標讀取下一行(如果有下一行的話),並且前進遊標指針。
遊標CLOSE語句:CLOSE cursor_name 這個語句關閉先前打開的遊標。

  1. loop 執行遍歷遊標
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章