到底要不要使用存储过程?

1. 前言

mysql 执行语句是要先编译,然后再执行的。这样如果查询并发大的时候。会浪费很多资源和时间。造成mysql进程占用资源过多,症状就是慢。但存储过程可以把一些特别的语句封装成一个方法 ,再编译好成一个可以执行的方法,对外只要接收参数就可以了。这样就不用再编译。执行就快了。什么时候会用到?你觉得你数据库因为同时出现太多读写操作而变得慢 ,那么就要用了,主要用来提升性能。


其他看法:
1.在传统企业,比如银行什么的,有严格的开发规范指定所有的业务逻辑处理必须放在存储过程里。开发人员不需要知道表结构,不需要知道字段类型,只用调用就好,保证数据库的安全性。所以必须保证写出的存储过程性能是极高的,但是即使性能很好,在数据库端进行大量的计算,还是会影响数据库的性能。
2.也看到阿里等等的大牛说不要使用存储过程,在大流量冲击下,数据库的负载压力会特别大,降低吞吐量。而且不易迁移和维护。
3.在互联网企业里,应该都很少使用存储过程吧,至少我没有碰到,业务逻辑需要在数据库端处理的。


2. 什么是存储过程

SQL语句需要先编译然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。


3. 使用存储过程的好处

1、很多相似性的删除,更新,新增等操作就变得轻松了,并且以后也便于管理!
2、存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。
3、存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。
4、存储过程运行比较稳定,不会有太多的错误。
5、存储过程主要是在服务器上运行,减少对客户机的压力。
6、存储过程可以从自己的存储过程内引用其它存储过程,简化复杂语句。


4.怎么使用呢

1.创建
2.删除
3.调用

1.创建存储过程
1.基本语法:
create procedure sp_name()
begin
.........
end
2.参数传递
2.删除
drop procedure sp_name;
3.调用
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

5.Mysql存储过程之简单使用

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

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `city` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

这里写图片描述

5.1创建不带参数的存储过程(查看学生个数)
DELIMITER ;;
CREATE PROCEDURE `select_students_count`()
BEGIN
    SELECT count(id) from students;
END;;
DELIMITER ;

执行存储过程
call select_students_count();

这里写图片描述

5.2 带参数的存储过程(根据城市查询总数)
DELIMITER ;;
CREATE PROCEDURE `select_students_by_city_count`(
   in _city varchar(225)
)
BEGIN
    SELECT count(id) from students where city = _city;
END;;
DELIMITER ;

执行存储过程
call select_students_by_city_count('杭州');

这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_37499059/article/details/80745954