一、什么是存储过程
存储过程是一组为了完成特定功能的 SQL 语句集合。使用存储过程的目的是将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用“CALL存储过程名字”即可自动完成。MySQL存储过程是什么?
二、存储过程怎么创建
- Mysql中存储过程和函数的写法
- 需求:
输入用户名,模糊查询,返回数量
- 执行,不报错就是创建成功了
CREATE PROCEDURE search_user_name ( #search_user_name为存储过程的名字
IN search_name VARCHAR (20),
#传入的参数
OUT count_number INT #返回的参数
) READS SQL DATA #程序中包含读数据的语句
BEGIN
SELECT
COUNT(*) INTO count_number
FROM
`user`
WHERE
`name` LIKE CONCAT('%', search_name, '%');
END
三、查看
- mysql查看存储过程函数,函数查看同理,把
PROCEDURE
改为FUNCTION
即可
SELECT `name` FROM mysql.proc WHERE db = 'test' and `type` = 'PROCEDURE' #查看指定数据库test中的存储过程
SHOW PROCEDURE STATUS #查看所有数据库的存储过程
SHOW CREATE PROCEDURE search_user_name #查看存储过程的创建代码
四、执行
1、执行说明
2、开始执行
- 查询名字中带有
李
的用户的数量
CALL search_user_name('李', @nameCount);
SELECT @nameCount;
- 输出
@nameCount
2
五、删除存储过程
- MySQL删除存储过程(DROP PROCEDURE)
- sql语句:删除名为
search_user_name
的存储过程
DROP PROCEDURE search_user_name;
- 返回结果
[SQL]DROP PROCEDURE search_user_name;
受影响的行: 0
时间: 0.085s
- 删除之后再执行
SHOW CREATE PROCEDURE search_user_name
,名为 search_user_name 的存储过程不存在,提示如下
[SQL]SHOW CREATE PROCEDURE search_user_name
[Err] 1305 - PROCEDURE search_user_name does not exist
六、Mysql高版本:this is incompatible with sql_mode=only_full_group_by 问题
- 如果运行的过程中报错:
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
- 这个问题是由于Mysql的版本太高导致的。
- 百度输入 this is incompatible with sql_mode=only_full_group_by 搜索 点击搜索
- 或者 直接移步 5分钟学会MySQL-this is incompatible with sql_mode=only_full_group_by错误解决方案
- 或者 看我这篇 SQL报错:this is incompatible with sql_mode=only_full_group_by