mysql存储过程

news/2024/7/7 22:11:40

基础查询

首先创建一张students学生表,增加字段与插入数据如下

创建不带参数的存储过程

查看学生个数

DROP PROCEDURE IF EXISTS select_students_count;  -- 没有括号() 
复制代码
DELIMITER ;;
CREATE PROCEDURE `select_students_count`()
BEGINSELECT count(id) from students;END;;
DELIMITER ;
复制代码

执行存储过程

call select_students_count();

带参数的存储过程

根据城市查询总数

DROP PROCEDURE IF EXISTS select_students_by_city_count; 
复制代码
DELIMITER ;;CREATE PROCEDURE `select_students_by_city_count`(in _city varchar(225)
)
BEGINSELECT count(id) from students where city = _city;END;;
DELIMITER ;
复制代码

执行存储过程

call select_students_by_city_count('杭州');

带有输出参数的存储过程

根据姓名查询的学生信息,返回学生的城市

DROP PROCEDURE IF EXISTS select_students_by_name; 
复制代码
DELIMITER ;;CREATE PROCEDURE `select_students_by_name`(in _name varchar(225),   -- 输入参数out _city varchar(225),  -- 输出参数inout _age int(11)       -- 输入输出参数
)
BEGINSELECT city  from students where name = _name and age = _age into _city;END;;
DELIMITER ;
复制代码

执行存储过程

set @_age = 20;
set @_name = 'jack';
call select_students_by_name(@_name, @_city, @_age);
select @_city as city, @_age as age;

MySQL支持IN(传递给存储过程),OUT(从存储过程传出)和INOUT(对存储过程传入和传出)类型的参数。存储过程的代码位于BEGINEND语句内,如前所见,它们是一系列SELECT语句,用来检索值,然后保存到相应的变量(通过指定INTO关键字)

带有通配符的存储过程

通配符,在参数值赋值时,加上相应的通配符

DROP PROCEDURE IF EXISTS select_students_by_likename;
复制代码
DELIMITER ;;CREATE PROCEDURE `select_students_by_likename`(in _likename varchar(225)  
)
BEGINset _likename = '%s%';  -- 默认值 SELECT *  from students where name like _likename;END;;
DELIMITER ;
复制代码

执行存储过程

call select_students_by_likename('%s%');

使用存储过程进行增删改

新增 

新增学生信息

DROP PROCEDURE IF EXISTS insert_student;
复制代码
DELIMITER ;;CREATE PROCEDURE `insert_student`(_id int,_name varchar(225),_age int,_city varchar(225)
)
BEGININSERT INTO students(ID,name,age,city) VALUES(_id,_name,_age,_city);END;;
DELIMITER ;
复制代码

执行存储过程

call insert_student(5,'张三',19,'上海');

执行完后表中就多了一条数据

修改

根据学生ID,更新学生信息

DROP PROCEDURE IF EXISTS update_student;
复制代码
DELIMITER ;;CREATE PROCEDURE `update_student`(_id int,_name varchar(225),_age int,_city varchar(225)
)
BEGINUPDATE  students SET name=_name, age=_age, city=_city where ID = _id;END;;
DELIMITER ;
复制代码

执行存储过程

call update_student(5,'amy',22,'杭州');

删除

根据ID,删除某学生记录

DROP PROCEDURE IF EXISTS delete_student_by_id;
复制代码
DELIMITER ;;CREATE PROCEDURE `delete_student_by_id`(_id int
)
BEGINDELETE FROM students where ID = _id;END;;
DELIMITER ;
复制代码

执行存储过程

call delete_student_by_id(5);

students表中id为5的那条记录就删除了

转载于:https://www.cnblogs.com/light-zhang/p/9098778.html


http://lihuaxi.xjx100.cn/news/238055.html

相关文章

ABP理论学习之数据传输对象(DTO)

本篇目录 为何需要DTO 领域层抽象数据隐藏序列化和懒加载问题DTO惯例和验证 DTO和实体的自动映射 使用特性和扩展方法进行映射帮助接口DTO用于应用层和 展现层间的数据传输。 展现层调用具有DTO参数的应用服务方法,然后应用服务使用领域对象来执行一些特定的业务逻辑…

搭建Zabbix分布式监控

1、实现zabbix监控nginx 实验环境: server1 172.25.1.1 server redhat7 test1 172.25.1.11 agent redhat7 在“手动添加”主机的基础上进行扩展 开启服务: [rootserver ~]# systemctl…

区块链侧链技术优势

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!asch使用的是不同于以太坊和比特币的侧链架构,dapp是运行在侧链上的,每套侧链对应一个dapp。 侧链的独立性 侧链架构的好处是代码和数据…

如何删除GO语言中安装的包

为什么80%的码农都做不了架构师?>>> 搜索了一下,只发现有安装包的相关说明,go的命令中,没有uninstall之类的命令。 参考: Go packages 中的解释: To uninstall, just delete the folder with t…

密码破解

思科启动过程:1、POTS:加点自检 - 设备通电以后,检查设备的各种硬件是否完好(橙--绿,无故障的是绿色或者灭掉) 2、查找操作系统(yes/no)flash网络3、查找“启动配置文件”:startup-config(yes/n…

git操作手册_基本的Git手册

git操作手册介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you a little bit about Git including:嗨! 我是Sanjula ,在本指南中,我希望教您一些有关Git的知识,包括: What Git is 什么是…

zabbix部署onealert云警告平台

onealert告警功能 告警 All In One,支持微信、邮箱、短信、APP、电话告警支持接入 Zabbix、Nagios、阿里云、腾讯云、监控宝等等告警信息灵活的分配策略,可灵活的分配告警信息发送给相关人员微信、邮箱、app 等告警方式全部免费实验环境: 首…

三大软件公司争霸赛区块链

导语:\\区块链技术发展到今天,区块链的扩容、吞吐量、运维弹性(Operational Resilience)、安全性、企业支持和Token管理等挑战,已成为区块链进一步发展绕不开的技术问题。\\突破这些现实技术挑战,不仅构能建…