mysql存储过程、函数

2020-11-25  本文已影响0人  爱折腾的傻小子
创建存储过程
调用存储过程
删除存储过程
修改存储过程
查看存储过程
-- 创建存储过程
/*设置结束符为$*/
DELIMITER $
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS procl;
/*创建存储过程procl*/
CREATE PROCEDURE procl()
  BEGIN
    INSERT INTO t_user VALUES (1,30,'啊啊啊');
    INSERT INTO t_user VALUES (2,50,'是是是');
  END $
/*将结束符置为;*/
DELIMITER ;
-- delimiter用来设置结束符,当mysql执行脚本的时候,遇到结束符的时候,会把结束符前面的所有语句作为一个整体运行
-- 存储过程中的脚本有多个sql,但是需要作为一个整体运行,所以此处用到了delimiter
-- mysql默认结束符是分号
/*调用存储过程*/
CALL procl();
/*参看添加效果*/
select * from t_user;
/*
+----+-----+---------------+
| id | age | name |
+----+-----+---------------+
| 1 | 30 | 啊啊啊 |
| 2 | 50 | 是是是 |
+----+-----+---------------+
2 rows in set (0.00 sec)
*/
/*设置结束符为$*/
DELIMITER $
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS proc2;
/*创建存储过程proc2*/
CREATE PROCEDURE proc2(id int,age int,in name varchar(16))
  BEGIN
    INSERT INTO t_user VALUES (id,age,name);
  END $
/*将结束符置为;*/
DELIMITER ;
-- 调用存储过程
/*创建了3个自定义变量*/
SELECT @id:=3,@age:=56,@name:='小数点';
/*调用存储过程*/
CALL proc2(@id,@age,@name);
-- 查看
select * from t_user;
/*
+----+-----+---------------+
| id | age | name |
+----+-----+---------------+
| 1 | 30 | 啊啊啊 |
| 2 | 50 | 是是是 |
| 3 | 56 | 小数点 |
+----+-----+---------------+
2 rows in set (0.00 sec)
*/
delete a from t_user a where a.id = 4;
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS proc3;
/*设置结束符为$*/
DELIMITER $
/*创建存储过程proc3*/
CREATE PROCEDURE proc3(id int,age int,in name varchar(16),out user_count int,out max_id INT)
  BEGIN
    INSERT INTO t_user VALUES (id,age,name);
    /*查询出t_user表的记录,放入user_count中,max_id用来存储t_user中最小的id*/
    SELECT COUNT(*),MAX(id) INTO user_count,max_id from t_user;
  END $
/*将结束符置为;*/
DELIMITER ;
-- proc3中前2个参数,没有指定参数模式,默认为in
-- 调用存储过程
/*创建了3个⾃定义变量*/
SELECT @id:=4,@age:=55,@name:='ssss';
/*调⽤存储过程*/
CALL proc3(@id,@age,@name,@user_count,@max_id);
-- 查看
select @user_count,@max_id;
/*
+-------------+---------+
| @user_count | @max_id |
+-------------+---------+
| 4 | 4 |
+-------------+---------+
1 row in set (0.00 sec)
*/
/*如果存储过程存在则删除*/
DROP PROCEDURE IF EXISTS proc4;
/*设置结束符为$*/
DELIMITER $
/*创建存储过程proc4*/
CREATE PROCEDURE proc4(INOUT a int,INOUT b int)
  BEGIN
    SET a = a * 2;
    SELECT b*2 into b;
  END $
/*将结束符置为;*/
DELIMITER ;
-- 嗲用存储过程
/*创建了2个⾃定义变量*/
set @a=10,@b:=20;
/*调⽤存储过程*/
CALL proc4(@a,@b);
-- 查看
SELECT @a,@b;
/*
+------+------+
| @a | @b |
+------+------+
| 20 | 40 |
+------+------+
1 row in set (0.00 sec)
*/
-- 上面的两个自定义变量@a、@b作为入参,然后在存储过程内部进行了修改,又作为了返回值
查看存储过程
show create procedure proc4;
/*
+-------+-------+-------+-------+-------+-------+
| Procedure | sql_mode | Create Procedure | character_set_client |
collation_connection | Database Collation |
+-------+-------+-------+-------+-------+-------+
| proc4 |
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ER
ROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc4`(INOUT a int,INOUT
b int)
BEGIN
SET a = a*2;
select b*2 into b;
END | utf8 | utf8_general_ci | utf8_general_ci
|
+-------+-------+-------+-------+-------+-------+
1 row in set (0.00 sec)
*/

函数
调用函数
删除函数
查看函数详情
/*删除fun1*/
DROP FUNCTION IF EXISTS fun1;
/*设置结束符为$*/
DELIMITER $
CREATE FUNCTION fun1()
  returns INT
  BEGIN
    DECLARE max_id int DEFAULT 0;
    SELECT max(id) INTO max_id FROM t_user;
    return max_id;
  END $
/*设置结束符为;*/
DELIMITER ;
-- 调用函数
select fun1();
/*
+--------+
| fun1() |
+--------+
| 4 |
+--------+
1 row in set (0.00 sec)
*/
/*删除函数*/
DROP FUNCTION IF EXISTS get_user_id;
/*设置结束符为$*/
DELIMITER $
/*创建函数*/
CREATE FUNCTION get_user_id(v_name VARCHAR(16))
  returns INT
  BEGIN
    DECLARE r_id int;
    SELECT id INTO r_id FROM t_user WHERE name = v_name;
    return r_id;
  END $
/*设置结束符为;*/
DELIMITER ;
-- 调用函数
SELECT get_user_id(name) from t_user;
/*
+-------------------+
| get_user_id(name) |
+-------------------+
| 1 |
| 2 |
| 3 |
| 4 |
+-------------------+
4 rows in set (0.00 sec)
*/

存储过程和函数的区别

[参考学习自 公众号:大侠学JAVA]

上一篇 下一篇

猜你喜欢

热点阅读