mysql 存储过程和触发器
存储过程
-- 声明结束符 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名称(参数列表) BEGIN -- 可以写多个sql语句; -- sql语句+流程控制 SELECT * FROM employee; END $ -- 结束 结束符 -- 执行存储过程 CALL pro_test(); -- CALL 存储过程名称(参数); -- 删除存储过程 DROP PROCEDURE pro_test; 参数: IN: 表示输入参数,可以携带数据带存储过程中 OUT: 表示输出参数,可以从存储过程中返回结果 INOUT: 表示输入输出参数,既可以输入功能,也可以输出功能
案例:
drop procedure if exists lopp;
create procedure lopp()
BEGIN
FOR idx IN 1 .. 1000
LOOP
INSERT INTO my_tab VALUES ('A' || idx);
END LOOP;
COMMIT;
dbms_stats.gather_table_stats(ownname => USER,
tabname => 'MY_TAB',
cascade => TRUE);
END;
触发器:
需求: 当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据
CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW -- 当往员工表插入一条记录时 INSERT INTO test_log(content) VALUES('员工表插入了一条记录');