-- 查询数据库中的存储过程和函数
SELECT `name` FROM mysql.proc WHERE db = 'xx' AND `type` = 'PROCEDURE' //存储过程
SELECT `name` FROM mysql.proc WHERE db = 'xx' AND `type` = 'FUNCTION' //函数
SHOW PROCEDURE STATUS; //存储过程
SHOW FUNCTION STATUS; //函数
-- 查看存储过程或函数的创建代码
SHOW CREATE PROCEDURE proc_name;
SHOW CREATE FUNCTION func_name;
-- 查看视图
SELECT * FROM information_schema.VIEWS //视图
SELECT * FROM information_schema.TABLES //表
-- 查看触发器
SHOW TRIGGERS [FROM db_name] [LIKE expr]
SELECT * FROM TRIGGERS T WHERE trigger_name=”mytrigger” \G
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE proc()
BEGIN
SELECT * FROM sc;
END //
DELIMITER ;
CALL proc();
DELIMITER //
CREATE PROCEDURE countproc(OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM sc;
END //
DELIMITER ;
-- 调用存储过程
CALL countproc(@param1);
-- 查询执行结果
SELECT @param1;
-- 存储过程信息的查看
SHOW PROCEDURE STATUS;
-- 删除存储过程
DROP PROCEDURE countproc;
-- 创建存储函数
DELIMITER //
CREATE FUNCTION nameByzip()
RETURNS CHAR(50)
RETURN (SELECT sname FROM student WHERE sid = 01 );
//
-- 查询存储函数
SELECT nameByzip();
-- 存储函数信息的查看
SHOW FUNCTION STATUS;
-- 定义变量
DECLARE myparam1 INT DEFAULT 100;
-- 为变量赋值
DECLARE var1, var2, var3 INT;
SET var1 = 1,var2 = 2;
SET var3 = var1 + var2;
-- 为查询变量赋值
DECLARE stu_name CHAR(50);
DECLARE stu_id INT;
SELECT sname, sid INTO stu_name, stu_id
FROM student WHERE sid = 02;
-- 定义条件
// 方法一:使用sqlstate_value
DECLARE command_not_allowed CONDITION FOR SQLSTATE '42000';
// 方法二:使用mysql_error_code
DECLARE command_not_allowed CONDITION FOR 1148;
-- 定义处理程序
DECLARE handler_type HANDLER FOR condition_value
CREATE TABLE test.t(s1 INT PRIMARY KEY);
DELIMITER //
CREATE PROCEDURE handlerdemo()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
SET @X = 1;
INSERT INTO test.t VALUES(1);
SET @x = 2;
INSERT INTO test.t VALUES(1);
SET @x = 3;
END;
//
/*调用存储过程*/
CALL handlerdemo();
/*查看调用过程结果*/
SELECT @x;
-- 声明光标
DECLARE cousor_stu CURSOR FOR SELECT sid, sname FROM student;
-- 打开光标
OPEN cursor_stu;
-- 使用光标
FETCH cursor_stu INTO stu_id, stu_name;
-- 关闭光标
CLOSE cursor_stu;
-- if语句
IF @val IS NULL
THEN SELECT 'val is null';
ELSE SELECT 'val is not null';
END IF;
-- case语句
-- 格式1:
CASE val
WHERE 1 THEN SELECT 'val is 1';
WHERE 2 THEN SELECT 'val is 2';
ELSE SELECT 'val is not 1 or 2';
END CASE;
-- 格式2:
CASE
WHERE val IS NULL THEN SELECT 'val is null';
WHERE val < 0 THEN SELECT 'val is less than 0';
WHERE val > 0 THEN SELECT 'val is greater than 0';
ELSE SELECT 'val is 0';
END CASE;
-- loop语句
DECLARE id INT DEFAULT 0;
add_loop:LOOP
SET id = id + 1;
IF id >= 10 THEN LEAVE add_loop;
END IF;
END LOOP add_loop;
-- leave语句
LEAVE lable;
add_num:LOOP
SET @count = @count + 1;
IF @count = 50 THEN LEAVE add_num;
END LOOP add_num;
-- iterate语句
ITERATE lable;
CREATE PROCEDURE doiterate()
BEGIN
DECLARE p1 INT DEFAULT 0;
my_loop:LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN ITERATE my_loop;
ELSEIF p1 > 20 THEN LEAVE my_loop;
END IF;
SELECT 'p1 is between 10 and 20';
END LOOP my_loop;
END
-- repeat语句
DECLARE id INT DEFAULT 0;
REPEAT
SET id = id + 1;
UNTIL id >= 10
END REPEAT;
-- while语句
DECLARE i INT DEFAULT 0;
WHILE i < 10 DO
SET i = i + 1;
END WHILE;
-- 调用存储过程用 call
CALL xxxx();
-- 调用存储函数用 select
SELECT xxxx();
-- 修改存储过程和函数
ALTER {PROCEDURE | FUNCTION) sp_name [characteristic...]
sp_name 存储过程或函数名称
characteristic 参数指定的函数特性:
CONTAINS SQL表示子程序包含SQL语句,但不包含读或写数据的语句.
NO SQL表示子程序中不包含SQL语句。
READS SQL DATA表示子程序中包含读数据的语句。
MODIFIES SQL DATA表示子程序中包含写数据的语句。
SQL SECURITY { DEFINER | INVOKER }指明谁有权限来执行。
DEFINER表示只有定义者自己才能够执行。
INVOKER表示调用者可以执行。
COMMENT 'string'表示注释信息。
-- 例子 将countpro的读写权限改为modifies sql data,并指明调用者可以执行
ALTER PROCEDURE countpro
MODIFIES SQL DATA
SQL SECURITY INVOKER;
-- 删除存储过程和函数
DROP {PROCEDURE | FUNCTION) [IF EXISTS] sp_name
-- 例子
DROP PROCEDURE countproc;
DROP FUNCTION countproc;
本文链接:https://blog.csdn.net/oneeyear/article/details/82902276