什么是储存过程?

存储和管理sql代码,相当与把这些sql代码保存在一个文件中,方便使用

创建一个储存过程

  1. delimiter $$
  2. create procedure get_invoice_with_balance()
  3. begin
  4. select
  5. *,(invoice_total - payment_total) AS balance
  6. FROM invoices
  7. where (invoice_total - payment_total) > 0 ;
  8. end $$
  9. delimiter ;

delimiter—定界符
为了将代码打包给mysql,而不是一句一句的执行,需要在END上一句末加上 ; 分割符
同时在CREATE PROCEDURE上加上delimiter ,同时END后也需要加上
PROCEDURE——程序,相当于创建一个函数
当要引用这个procedure时,使用语句

  1. call sql_invoicing.get_invoice_with_balance();

使用mysql控制台创建储存过程

在导航面板,点击store procedure →create· procedure
这个不用担心分隔符的问题
image.png
反引号的目的时防止与SQL关键字的冲突

删除储存过程

  1. drop procedure get_balance;

便于后续的更改

  1. drop procedure get_balance;
  2. delimiter $$
  3. create procedure get_balance()
  4. begin
  5. end
  6. delimiter ;

最后保存到文件夹中,方便后续查看与更改

参数Parameters

在储存过程后的括号中添加参数,第一个代表参数名,第二个代表餐宿类型

  1. delimiter $$
  2. CREATE PROCEDURE get_invoice_by_client(p_client_id int)
  3. BEGIN
  4. SELECT*
  5. FROM invoices i
  6. WHERE client_id = p_client_id;
  7. END $$
  8. delimiter ;

image.png
更像函数了

未完待续

这章有点小难,我先跳过了,先给自己留个印象,后面遇到了再来补吧