DELIMITER //
CREATE PROCEDURE procedure_name (IN input_parameter_name datatype, OUT output_parameter_name datatype, ...)
BEGIN
-- SQL statements
END //
DELIMITER ;
CALL GetAverageSalaryByDepartment(1, @avg_salary);
SELECT @avg_salary;
触发器
触发器是一种特殊的存储过程,它在某些数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器可以用于强制复杂的业务规则、审计或自动化日志记录等。
CREATE TRIGGER audit_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_audit (employee_id, old_salary, new_salary, update_time)
VALUES (OLD.employee_id, OLD.salary, NEW.salary, NOW());
END;
- 权限:创建存储过程和触发器需要适当的权限,通常是
CREATE ROUTINE
和TRIGGER
权限。 - 调试:存储过程和触发器中的错误可能较难调试,因此在开发过程中要格外小心。
- 性能:复杂的存储过程和触发器可能会影响数据库性能,特别是在高并发环境下。
- 版本兼容性:不同版本的MySQL可能对存储过程和触发器的支持有所不同,确保你的代码与你的数据库版本兼容。
通过合理使用存储过程和触发器,你可以显著提高数据库操作的效率和可靠性。