首先创建一张 students 表

SQL脚本如下:

create table students(
id int primary key auto_increment,
age int,
name varchar(20),
city varchar(20)
) character set utf8; insert into students values(null, 22, 'lisa', '杭州');
insert into students values(null, 16, 'rock', '上海');
insert into students values(null, 20, 'jack', '深圳');
insert into students values(null, 21, 'rose', '北京');

不带参数的存储过程

-- 查询学生个数
drop procedure if exists select_students_count; delimiter ;; -- 替换分隔符
create procedure select_students_count()
begin
select count(id) from students;
end ;;
delimiter ;

执行存储过程:

call select_students_count();

带参数的存储过程

-- 根据城市查询总数
delimiter ;;
create procedure select_students_by_city_count(in _city varchar(255))
begin
select count(id) from students where city = _city;
end;;
delimiter ;

执行存储过程:

call select_students_by_city_count('上海');

带有输出参数的存储过程

MySQL 支持 in (传递给存储过程),out (从存储过程传出) 和 inout (对存储过程传入和传出) 类型的参数。存储过程的代码位于 begin 和 end 语句内,它们是一系列 select 语句,用来检索值,然后保存到相应的变量 (通过 into 关键字)

-- 根据姓名查询学生信息,返回学生的城市
delimiter ;;
create procedure select_students_by_name(
in _name varchar(255),
out _city varchar(255), -- 输出参数
inout _age int(11)
)
begin
select 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;

带有通配符的存储过程

delimiter ;;
create procedure select_students_by_likename(
in _likename varchar(255)
)
begin
select * from students where name like _likename;
end ;;
delimiter ;

执行存储过程:

call select_students_by_likename('%s%');
call select_students_by_likename('%j%');

使用存储过程进行增加、修改、删除

增加

delimiter ;;
create procedure insert_student(
_id int,
_name varchar(255),
_age int,
_city varchar(255)
)
begin
insert into students(id,name,age,city) values(_id,_name,_age,_city);
end ;;
delimiter ;

执行存储过程:

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

执行完后,表中多了一条数据,如下图:

修改

delimiter ;;
create procedure update_student(
_id int,
_name varchar(255),
_age int,
_city varchar(255)
)
begin
update students set name = _name, age = _age, city = _city where id = _id;
end ;;
delimiter ;

执行存储过程:

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

删除

delimiter ;;
create procedure delete_student_by_id(
_id int
)
begin
delete from students where id=_id;
end ;;
delimiter ;

执行存储过程:

call delete_student_by_id(5);

students 表中 id 为5的那条记录成功删除。如下图:

查询存储过程

查询所有的存储过程:

select name from mysql.proc where db='数据库名';

查询某个存储过程:

show create procedure 存储过程名;


本文永久更新地址:https://github.com/nnngu/LearningNotes/blob/master/MySQL/01%20MySQL%20%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B%E7%9A%84%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8.md

最新文章

  1. 让Lua自己把文件夹下面的所有文件自动加载起来吧
  2. linux split 及优化
  3. 用Arduino剖析PWM脉宽调制
  4. 用C++实现的SDK跨平台心得体会
  5. linux命令:locate
  6. Supervisor 的配置与使用
  7. 任督二脉之Shell中的正则表达式
  8. Spring-dispatcherServlet
  9. Android invalidate() 和 postInvalidate()的区别
  10. Intellij IDEA 的使用(创建项目、导入项目、同时部署多个项目、JRebel)等常见eclipse、myeclipse换idea必看
  11. [tty与uart]1.Linux中tty框架与uart框架之间的调用关系剖析
  12. ARP
  13. C++程序设计实践指导1.5求两个整数集合并集改写要求实现
  14. SPOJ 1435 - Vertex Cover(树形DP,树的最小点覆盖)
  15. android教学大纲
  16. Java对字符串进行的操作
  17. HDU [P3605] Escape
  18. EBS应收(AR)模块常用表
  19. JavaScript函数定义 ,参数调用
  20. asp.net mvc ViewData 和 ViewBag区别,TempData

热门文章

  1. windows下更改mysql数据储存物理目录
  2. DEDECMS点击主栏目默认显示第一个子栏目列表的方法
  3. JAVA WEB之Spring4.x JdbcTemplate
  4. mysql批量数据脚本
  5. 浅谈Android进阶之路
  6. Log4j扩展使用--输出地Appender
  7. junit4X系列源码--总体介绍
  8. 防盗链[referer]
  9. org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor
  10. 通过脚本生成poco实体