在数据库系统中,为了保证数据的完整性、一致性,同时也为提高其应用性能,大多数数据库常采用存储过程和存储函数技术。
1、创建存储过程
在MySQL中,创建存储过程使用CREATE PROCEDURE关键字,其基本形式如下:
CREATE PROCEDURE proc_name ([IN | OUT | INOUT param_name type [,...]])
[characteristic ...]
BEGIN
routine_body
END;
参数说明:
(1)proc_name:表示存储过程的名称。
(2)[IN | OUT | INOUT param_name type:表示存储过程的参数,它们分别是输入输出类型,参数名称和参数类型。其中,IN表示输入参数;OUT表示输出参数;INOUT表示既可以输入也可以输出;param_name参数是存储过程参数名称;type参数是指定存储过程的参数类型,该类型可以为MySQL数据库的任意数据类型。
(3)routine_body:表示SQL代码的内容。
2、调用存储过程
在MySQL中,使用CALL语句来调用存储过程,基本语法形式如下:
CALL proc_name([parameter[,…]]);
其中proc_name是存储过程的名称;parameter是存储过程的参数。
示例:创建存储过程,实现根据用户编号,获取用户姓名功能。
(1)先创建tb_user(用户信息表),并添加数据。
-- 创建用户信息表
CREATE TABLE IF NOT EXISTS tb_user
(
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
name VARCHAR(50) NOT NULL COMMENT '用户姓名'
) COMMENT = '用户信息表';
-- 添加数据
INSERT INTO tb_user(name) VALUES('pan_junbiao的博客');
INSERT INTO tb_user(name) VALUES('KevinPan');
INSERT INTO tb_user(name) VALUES('pan_junbiao');
INSERT INTO tb_user(name) VALUES('阿标');
INSERT INTO tb_user(name) VALUES('panjunbiao');
INSERT INTO tb_user(name) VALUES('pan_junbiao的CSDN博客');
INSERT INTO tb_user(name) VALUES('https://blog.csdn.net/pan_junbiao');
查询数据结果:
(2)创建存储过程。
-- 创建存储过程
CREATE PROCEDURE proc_user(IN in_id INT,OUT out_name VARCHAR(50))
BEGIN
SELECT name INTO out_name FROM tb_user
WHERE id = in_id;
END;
(3)调用存储过程
SET @id = 1;
CALL proc_user(@id,@name);
SELECT @name;
执行结果:
3、修改存储过程
MySQL中通过ALTER PROCEDURE语句来修改存储过程,但是只能修改存储过程的特性,暂时不支持修改存储过程的代码内容,所以如果真的要修改存储过程的代码内容,那么只能先删除该存储过程,然后再重写创建。
4、删除存储过程
MySQL中使用DROP PROCEDURE语句来删除存储过程。
示例:删除存储过程。
DROP PROCEDURE IF EXISTS proc_user;