【MySQL进阶】——自定义函数和存储过程入门

   日期:2020-08-07     浏览:90    评论:0    
核心提示:本文主要介绍如何创建和使用MySQL函数和存储过程。

文章目录

  • 一、自定义函数
    • 1. 创建演示环境
      • 1.1 创建数据库
      • 1.2 创建数据表
      • 1.3 插入示例数据
    • 2. 创建示例函数
    • 3. 使用自定义函数
  • 二、存储过程
    • 1. 定义存储过程
    • 2. 使用存储过程
  • 三、参考资料

一、自定义函数

1. 创建演示环境

1.1 创建数据库

为了更好的演示如何创建和使用MySQL自定义函数,下面先创建一个演示用的数据库db4_demo

mysql> -- 创建数据库db4_demo
mysql> CREATE DATABASE db4_demo charset=utf8;
Query OK, 1 row affected (0.01 sec)

mysql> use db4_demo;
Database changed

1.2 创建数据表

接着,创建一个数据表products

mysql> -- 创建数据表products
mysql> CREATE TABLE
    ->     products (prod_id INT NOT NULL AUTO_INCREMENT,
    ->               prod_name VARCHAR(20) NOT NULL,
    ->               prod_cost FLOAT NOT NULL DEFAULT 0.0,                     
    ->               prod_price FLOAT NOT NULL DEFAULT 0.0,
    -> PRIMARY KEY(prod_id)                                                     
    ->               )
    -> ;
Query OK, 0 rows affected (0.01 sec)

1.3 插入示例数据

mysql> INSERT INTO
    ->     products (prod_name, prod_cost, prod_price)
    -> VALUES
    ->     ('Basic Widget', 5.95, 8.35),
    ->     ('Micro Widget', 0.95, 1.35),
    ->     ('Mega Widget', 99.95, 140.00)
    -> ;
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

2. 创建示例函数

下面创建一个自定义函数calcProfit,该函数接受两个参数:产品成本cost、产品售价price,返回产品利润profit

mysql> DELIMITER $
mysql> CREATE FUNCTION calcProfit (cost FLOAT, price FLOAT) RETURNS DECIMAL(9, 2)
    -> BEGIN
    ->     DECLARE profit DECIMAL(9, 2);
    ->     SET profit = price - cost;
    ->     RETURN profit;
    -> END 
    -> $
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

注意

  • 在创建函数CREATE FUNCTION命令前使用DELIMITER是为了将MySQL默认的语句分隔符由;切换为$,否则因为函数体内部会因为包含;而提前结束,从而导致函数创建失败,另外DELIMITER$之间必须有空格
  • 在完成函数创建后,需要注意将DELIMITER ;命令再次将MySQL默认语句分隔符切换回;同样DELIMITER;之间必须有空格
  • 可以:
    • 通过show create function 函数名;查看已自定义的函数;
    • 通过drop function 函数名删除自定义函数。

3. 使用自定义函数

下面可以使用上述自定义函数calcProfit

mysql> SELECT 
    ->     *, calcProfit(prod_cost, prod_price)
    -> AS
    ->     profit
    -> FROM
    ->     products
    -> ;
+---------+--------------+-----------+------------+--------+
| prod_id | prod_name    | prod_cost | prod_price | profit |
+---------+--------------+-----------+------------+--------+
|       1 | Basic Widget |      5.95 |       8.35 |   2.40 |
|       2 | Micro Widget |      0.95 |       1.35 |   0.40 |
|       3 | Mega Widget  |     99.95 |        140 |  40.05 |
+---------+--------------+-----------+------------+--------+
3 rows in set (0.01 sec)

上述calcProfit函数自动计算出了每个产品的利润。

二、存储过程

MySQL的存储过程和函数很容易混淆,但二者又有很大区别,比如存储过程应该使用CALL语句调用,而函数可直接和SQL表达式一起使用。

1. 定义存储过程

mysql> DELIMITER $
mysql> CREATE PROCEDURE procedureTest()
    -> BEGIN
    ->     SELECt prod_name FROM products;
    -> END
    -> $
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

2. 使用存储过程

mysql> CALL procedureTest() 
    -> ;
+--------------+
| prod_name    |
+--------------+
| Basic Widget |
| Micro Widget |
| Mega Widget  |
+--------------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

三、参考资料

  • [1] CREATE PROCEDURE and CREATE FUNCTION Statements
  • [2] MySQL Stored Procedure & MySQL Functions Guide
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服