在 MySQL
中,创建存储过程的 SQL
查询并不是通过“保存”的方式来实现的,而是通过执行带有 CREATE PROCEDURE
语句的 SQL
语句将其定义写入数据库中。下面是一些关键点,以帮助理解创建存储过程的具体步骤以及如何在工具(如 Navicat
)中进行操作:
存储过程的创建与执行
- 定义存储过程: 你通过编写一个
CREATE PROCEDURE
语句在MySQL
中定义存储过程。这个过程可以包含输入输出参数以及具体的SQL
查询逻辑。 -
执行查询: 你通过执行这个定义语句,
MySQL
会把它作为一个存储过程存储在数据库中。当你执行这条查询时,数据库会“保存”你定义的存储过程。 -
示例:
-
假设你要创建一个存储过程
GetCouponSummary
,其SQL
语句如下所示:CREATE PROCEDURE GetCouponSummary(IN input_date DATE) BEGIN SELECT cd.price AS '优惠券金额', COUNT(cd.id) AS '数量' FROM coupon_detail cd INNER JOIN coupon c ON cd.order_no = c.order_no WHERE c.`status` = 1 AND c.order_no IN ( SELECT DISTINCT(order_no) FROM coupon_detail WHERE begin_date < DATE_SUB(input_date, INTERVAL 8 MONTH) AND trade_no IS NULL AND package_no IS NOT NULL ) AND cd.price != 50 AND (cd.coupon_state = 'WAITE' OR cd.coupon_state = 'SENDED') AND cd.package_no <> 'DKVIP_120' GROUP BY cd.price; END;
- 在
Navicat
中执行并保存:
- 在
Navicat
中,你并不需要手动创建文件来“保存”存储过程。只需将上述SQL
代码放入新的查询窗口中,点击运行按钮将其执行。 - 当你执行这个查询后,
MySQL
将会把这个存储过程保存到你所指定的数据库中。 - 调用示例。
-- CALL 关键字 CALL GetCouponSummary('2025-01-01')
结论
- 每次你执行包含
CREATE PROCEDURE
的SQL
语句,都会创建(或更新,如果已经存在同名过程)一个存储过程。 - 存储过程定义并不需要单独保存为文件,它会在执行的数据库中保留,直到被删除或更改。
- 你可以查看已创建的存储过程,通常在
Navicat
的数据库视图中会有一个名为“存储过程”的节点,可以查看所有已定义的存储过程。