MySQL存储过程
存储过程简介:
1:一组为了完成特定功能的SQL语句集,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
2:存储过程是可编程的函数,在数据库中创建并保存,
3:数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。
存储过程思想上很简单,就是对数据库 SQL 语言层面的代码封装与重用
优点:
- 增强SQL语言的功能和灵活性
- 标准组件式编程
- 较快的执行速度
缺点:
- 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
- 存储过程的性能调校与撰写,受限于各种数据库系统。
参数:
IN:参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT: 该值可在存储过程内部被改变,并可返回
INOUT: 调用时指定,并且可被改变和返回
创建:
MySQL存储过程的创建:语法:
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …]
过程体
DELIMITER $
CREATE PROCEDURE myproc(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
END$
测试:
创建一个数据库,并插入数据
CREATE TABLE admin(
`id` int(16) PRIMARY KEY auto_increment,
`name` VARCHAR(16),
`password` VARCHAR(16)
)
INSERT into admin VALUES
(1,'tiechui','123'),
(2,'yaoji','321'),
(3,'qq','123')
1:in 输入参数,根据id查找admin的用户名
delimiter $
CREATE PROCEDURE p2(in id int)
BEGIN
SELECT * FROM admin WHERE admin.id = id;
END$
call p2(1)
2:传入用户名和密码,判断用户是否注册
delimiter $
CREATE PROCEDURE p3(in aname VARCHAR(16),in pwd VARCHAR(16))
BEGIN
DECLARE c int;
SELECT count(*) into c
FROM admin
WHERE `name` = aname AND `password` = pwd;
SELECT if(c>0,'已注册','未注册');
END$
call p3('tiechui','123');
3:根据id返回用户名
delimiter $
CREATE PROCEDURE p4(in aid int, out aname VARCHAR(16))
BEGIN
SELECT `name` into aname FROM admin WHERE id = aid;
END$
call p4(1,@aname);
SELECT @aname
4:根据id返回用户名和密码;
delimiter $
CREATE PROCEDURE p5(in aid int,out aname VARCHAR(16),out apwd VARCHAR(16))
BEGIN
SELECT `name`,`password` into aname,apwd FROM admin WHERE id = aid;
END$
call p5(1,@aa,@bb);
SELECT @aa,@bb;
5:创建存储过程,传入两个参数,将他们翻倍
delimiter $
CREATE PROCEDURE p6(INOUT a int,INOUT b int)
BEGIN
set a = a * 2;
set b = b * 2;
END$
set @a = 12;
set @b = 34;
call p6(@a,@b);
SELECT @a,@b;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71901.html