項目需求: 註冊的新用戶根據不同的賬戶,往另一個表插入一條賬戶信息
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 ;
針對字段剖析:
- register_add_account 觸發器的自定義名稱
- after 在…之後 共兩個操作(before,after)
- insert 表示用來監聽更新語句的操作 共三個操作(insert,update,delete)
- user 表名
- for each row 針對每條插入數據都有效
- NEW 表示insert操作插入的數據
- 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 這個語句關閉先前打開的遊標。
- loop 執行遍歷遊標