mysql中有两种方式存储代码,存储过程、存储函数。有人倡导使用存储代码,也有人反对。这里我们不站在任何一边,只是列举一下在MySQL中使用存储代码的优点和缺点。首先,它有如下优点:
存储代码也有如下缺点:
一、存储过程
1.创建存储过程
在MySQL中,创建存储过程的基本形式如下。
CREATE PROCEDURE sp_name ([proc_parameter[……]])
[characteristic ……] routine_body
其中,sp_name参数是存储过程的名称;proc_parameter表示存储过程的参数列表;characteristic参数指定存储过程的特性;routine_body参数是SQL代码的内容,可以用BEGIN……END来标识SQL代码的开始和结束。
举个例子:
表结构和数据:
创建存储过程:
delimiter //
CREATE PROCEDURE count_of_user ( OUT count_num INT )
READS SQL DATA
BEGIN
SELECT
count( * ) INTO count_num
FROM
USER;
END //
调用存储过程:
call count_of_user(@a);
select @a;
2.查看存储过程的状态
SHOW PROCEDURE STATUS LIKE 'count_of_user';
3.查看存储过程的定义
show create procedure count_of_user;
4.删除存储过程
drop procedure count_of_user
二、存储函数
创建存储函数的基本格式。
CREATE FUNCTION sp_name ([func_parameter[,……]])
RETURNS type
[characteristic ……] routine_body
参数 | 说明 |
sp_name | 存储函数的名称 |
fun_parameter | 存储函数的参数列表 |
RETURNS type | 指定返回值的类型 |
characteristic | 指定存储过程的特性 |
routine_body | SQL代码的内容 |
写个例子:
1.建表语句和数据插入语句
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',
`password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '密码',
`phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电话',
`gmt_date` datetime(0) NULL DEFAULT NULL COMMENT '注册时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '萧炎', '123', '18800070001', '2020-07-26 16:05:56');
INSERT INTO `user` VALUES (2, '小王', '123', '18800070002', '2020-07-26 16:16:58');
INSERT INTO `user` VALUES (3, '小张', '123', '18800070003', '2020-07-28 16:35:19');
INSERT INTO `user` VALUES (4, '小刘', '123', '18800070004', '2020-07-28 16:35:20');
INSERT INTO `user` VALUES (5, '小谭', '123', '18800070005', '2020-07-29 16:35:22');
2.创建存储函数
delimiter //
CREATE FUNCTION fun5 ( sid INT )
RETURNS VARCHAR ( 50 )
READS SQL DATA -- 如果开启了bin-log, 我们就必须指定我们的函数是否是什么类型的,否则不用指明
BEGIN
RETURN ( SELECT NAME FROM USER WHERE id = sid );
END
//
3.调用存储函数
标注格式:
SELECT function_name([parameter[,…]]);
实际例子:
SELECT fun5(1);
4.查询存储函数状态
show function status;
5.查询存储函数状态根据函数名模糊查询
show function status like 'fun5';
6.删除存储函
drop function fun4;
分享一句最近看到的一句话,如果可以的话,今年冬天想跟你一起吃火锅,一起放烟花,一起看雪,一起跨年!(希望帮助小伙伴们撩到妹子)
我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有16522位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!