Mysql存储过程与函数篇,创建存储过程

2026-04-19 18:26:13

1、创建存储过程的语法结构

CREATE PROCEDURE sp_name([proc_parameter])

[characteristics..] routine body

Mysql存储过程与函数篇,创建存储过程

2、CREATE PROCEDURE :创建存储过程的关键字

sp_name :存储过程名称

proc_parameter:参数列表

characteristic:存储过程特性

routine body SQL内容,BEGIN和END关键字表示SQL代码的开始与结

Mysql存储过程与函数篇,创建存储过程

3、proc_parameter 参数列表 格式如下:

[IN | OUT | INOUT] param_name type

IN : 表示输入函数

OUT: 表示输出函数

INOUT: 输入输出都可

Mysql存储过程与函数篇,创建存储过程

4、characteristic,存储过程特性,取值如下:

1.LANGUAGE SQL:说明 routine body部分是由SL语句组成的,当前系统支持的语言为SQL,SQL是 LANGUAGE特性的唯一值

2.[NOT] DETERMINISTIC:指明存储过程执行的结果是否确定。 DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。NOT DETERMINISTIC表示结果是不确定的,相同的输入可能得到不同的输出。如果没有指定任意一个值,默认为 NOT DETERMINISTIC

3.{ CONTAINS SQL| NO SQL| READS SQL DATA| MODIFIES SQL DATA}指

明子程序使用SL语句的限制。

CONTAINS SQL表明子程序包含SOL语句,但是不包含读写数据的语句;

NO SQL表明子程序不包含SQL语句;

READS SQL DATA说明子程序包含读数据的语句;

MODIFIES SQL DATA表明子程序包含写数据的语句。默认情况下,系统会指定为 CONTAINS SQL

4.SQL SECURITY{ DEFINER| INVOKER}:指明谁有权限来执行。DEFINER表示只有定义者才能执行。 INVOKER表示拥有权限的调用者可以执行。默认情况下,系统指定为DEFINER COMMENT' string:注释信息,可以用来描述存储过程或函数。

Mysql存储过程与函数篇,创建存储过程

1、创建示例表

DROP TABLE IF EXISTS `test_9`;

CREATE TABLE `test_9` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `fruits_name` varchar(50) DEFAULT NULL,

  `price` decimal(10,2) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;

INSERT INTO `test_9` VALUES ('1', 'apple', '14.00');

INSERT INTO `test_9` VALUES ('2', 'orange', '12.00');

INSERT INTO `test_9` VALUES ('3', 'banana', '25.00');

INSERT INTO `test_9` VALUES ('4', 'watermelon', '5.00');

INSERT INTO `test_9` VALUES ('5', 'kiwifruit', '30.00');

INSERT INTO `test_9` VALUES ('6', 'hamimelon', '10.00');

INSERT INTO `test_9` VALUES ('7', 'pitaya', '15.00');

INSERT INTO `test_9` VALUES ('8', 'grape', '20.00');

INSERT INTO `test_9` VALUES ('9', 'cherry', '30.00');

INSERT INTO `test_9` VALUES ('10', 'guava', '10.00');

Mysql存储过程与函数篇,创建存储过程

2、创建无参数的存储过程

CREATE PROCEDURE get_avg_price ()

BEGIN

    SELECT

        AVG(price) AS avg_price

    FROM

        test_9;

END;

调用一下

CALL get_avg_price();

Mysql存储过程与函数篇,创建存储过程

Mysql存储过程与函数篇,创建存储过程

3、3.创建带参数的存储过程

CREATE PROCEDURE get_sum_price (

    IN fid INT,

    OUT sum_price DECIMAL (10, 2)

)

BEGIN

    SELECT

        SUM(price) INTO sum_price    FROM

        test_9

    WHERE id > fid;

END;

调用一下

CALL get_sum_price(3,@sum_price);

SELECT @sum_price;

Mysql存储过程与函数篇,创建存储过程

Mysql存储过程与函数篇,创建存储过程

猜你喜欢