当前位置:网站首页>MySQL stored procedure
MySQL stored procedure
2022-06-26 19:37:00 【yly. py】
Defining variables
SET @username = ‘yly’;
Defined function
DROP FUNCTION IF EXISTS select_by;
DELIMITER //
CREATE FUNCTION select_by(INT(10) user_id)
RETURNS VARCHAR(25)
DETERMINISTIC # Whether there is certainty -> Whether the multiple execution results are the same
CONTAINS SQL # Does it include sql
READS SQL DATA # Just read sql data , No modification
# If you do not add the above restrictions, an error will be reported
BEGIN
RETURN (SELECT username FROM sys_user su WHERE su.user_id=user_id);
END //
DELIMITER ;
Call function
SELECT select_by(2022);
Define stored procedures
-- in
DROP PROCEDURE IF EXISTS select_user_by_username;
DELIMITER $$
CREATE PROCEDURE select_user_by_username(IN username VARCHAR(20)) -- IN Enter the reference OUT The ginseng INOUT Will do
BEGIN
SELECT * FROM sys_user su
WHERE su.username=username;
END $$
DELIMITER ;
-- out
DROP PROCEDURE IF EXISTS select_user_by_username;
DELIMITER $$
CREATE PROCEDURE select_user_by_username(IN username VARCHAR(20),OUT userdata VARCHAR(40)) -- IN Enter the reference OUT The ginseng INOUT Will do
BEGIN
SELECT su.username INTO userdata
FROM sys_user su
WHERE su.username=username;
END $$
DELIMITER ;
Calling stored procedure
-- 1
CALL select_user_by_username('yly');
-- 2
SET @username = '';
CALL select_user_by_username('yly',@username);
SELECT @username;
View stored procedures
-- 1
-- Create information
SHOW CREATE PROCEDURE select_user_by_username;
SHOW CREATE FUNCTION select_by;
-- State information
SHOW PROCEDURE STATUS LIKE '';
SHOW FUNCTION STATUS LIKE '';
--2 from information_schema.Routines View the information of stored procedures and functions in the table
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='select_user_by_username' AND ROUTINE_TYPE='PROCEDURE';
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='select_by' AND ROUTINE_TYPE='FUNCTION';
-- modify
ALTER PROCEDURE select_user_by_username
COMMENT ' adopt username Query the user ';
-- Delete
DROP PROCEDURE IF EXISTS select_user_by_username;
## mysql Variable
mysql System variables
-- overall situation conversation
-- Look at the system variables
SHOW GLOBAL VARIABLES LIKE 'admin_%';
SHOW SESSTION VARIABLES LIKE 'character_%';
-- View the specified system variable
SELECT @@global.max_connections;
-- modify
SET @@global.max_connections = 124;
SET GLOBAL max_connections = 123;
-- The global system variable is valid for the current database instance , Once the restart mysql service , It will fail. ;
mysql User variables
-- Defining variables
-- 1
SET @username = '';
SET @username := '';
-- 2
SELECT @username := FROM sys_user;
SELECT username INTO @username := FROM sys_user;
-- Use
SELECT @username;
-- Defining local variables
-- local variable Use DECLARE Statement
-- Only in PROCEDURE, FUNCTION Use in ;
-- BEGIN First line
-- Declaration format
DECLARE username VARCHAR(30) '';
DELIMITER $$
CREATE PROCEDURE `test_var`()
BEGIN
DECLARE username VARCHAR(20); -- If not specified, it will be empty
SELECT username INTO username FROM sys_user;
SELECT username;
END;
$$
DELIMITER ;
Define errors and handlers
Define error conditions
DECLARE '' /*error*/ CONDITION FOR ''/*error_code*/;
DECLARE Field_Not_Be_NULL CONDITION FRO 1048;
DECLARE Field_Not_Be_NULL CONDITION FRO SQLSTATE '1048';
Define handler
DECLARE EXIT/**/ HANDLER FRO Field_Not_Be_NULL SET @INFO = 'ERROR';
if
-- IF(a,b,c) amount to a ? b : c
DROP PROCEDURE IF EXISTS test_var;
DELIMITER $$
BEGIN
DECLARE username VARCHAR(20);
SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
IF username = 'yly'
THEN SET username='';
ELSEIF username='hello'
THEN SET username='123456';
ELSE SET username='hhhhh';
END IF;
SELECT username;
END;
$$
DELIMITER ;
case
DROP PROCEDURE IF EXISTS test_var;
DELIMITER $$
CREATE PROCEDURE `test_var`()
BEGIN
DECLARE username VARCHAR(20);
SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
-- CASE username
-- when 'yly3' THEN SET username='';
-- When 'hello' THEN SET username='123456';
-- Else SET username='else';
-- end case;
CASE
WHEN LENGTH(username)>4 THEN SET username='';
WHEN LENGTH(username)>1 THEN SET username='123456';
ELSE SET username='else';
END CASE;
SELECT username;
END;
$$
DELIMITER ;
loop while repeat
loop It feels like for equally
DROP PROCEDURE IF EXISTS test_loop;
DELIMITER $$
CREATE PROCEDURE `test_loop`()
BEGIN
DECLARE username VARCHAR(20);
DECLARE `count` INT(10) DEFAULT 0;
SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
loop_label:LOOP
SET `count` = `count`+1;
IF `count` >= 10 THEN LEAVE /* Out of the loop */ loop_label;
END IF;
END LOOP loop_label;
SELECT username,`count`;
END;
$$
DELIMITER ;
while It feels like while You can also add label
DROP PROCEDURE IF EXISTS test_while;
DELIMITER $$
CREATE PROCEDURE `test_while`()
BEGIN
DECLARE username VARCHAR(20);
DECLARE `count` INT(10) DEFAULT 0;
SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
WHILE `count` < 10 DO
SET `count` = `count`+1;
END WHILE
SELECT username,`count`;
END;
$$
DELIMITER ;
repeat It feels like do while
DROP PROCEDURE IF EXISTS test_while;
DELIMITER $$
CREATE PROCEDURE `test_while`()
BEGIN
DECLARE username VARCHAR(20);
DECLARE `count` INT(10) DEFAULT 0;
SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
REPEAT
SET `count` = `count`+1;
UNTIL `count` >= 10
END REPEAT;
SELECT username,`count`;
END;
$$
DELIMITER ;
LEAVE and ITERATE image continue
-- LEAVE
DROP PROCEDURE IF EXISTS test_while;
DELIMITER $$
CREATE PROCEDURE `test_while`()
test:BEGIN
DECLARE username VARCHAR(20);
DECLARE `count` INT(10) DEFAULT 0;
SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
REPEAT
SET `count` = `count`+1;
UNTIL `count` >= 10
END REPEAT;
LEAVE test; -- It will stop here
SELECT username,`count`;
END;
$$
DELIMITER ;
-- ITERATE
DROP PROCEDURE IF EXISTS test_loop;
DELIMITER $$
CREATE PROCEDURE `test_loop`()
BEGIN
DECLARE username VARCHAR(20);
DECLARE `count` INT(10) DEFAULT 0;
SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
loop_label:LOOP
SELECT username,`count`;
SET `count` = `count`+1;
IF `count` >= 10 THEN LEAVE /* Out of the loop */ loop_label;
END IF;
IF `count` < 3 THEN SELECT 100; ITERATE loop_label;
END IF;
SET `count` = `count`+100;
END LOOP loop_label;
SELECT username,`count`;
END;
$$
DELIMITER ;
CALL test_loop();
The cursor
边栏推荐
- System table SQLite of SQLite database_ master
- Kubernetes 资源拓扑感知调度优化
- MySQL - subquery usage
- tsconfig. json
- Project practice 6: distributed transaction Seata
- Request method 'POST' not supported
- 网上办理中金财富开户安全吗?
- Nftgamefi chain game system development detailed solution - chain game system development principle analysis
- 股票开户的具体步骤是什么?网上开户安全吗?
- Yujun product methodology
猜你喜欢
随机推荐
Jsonutils tool class (based on Alibaba fastjson)
微服务架构
Is it safe to open an account for CICC Wealth Online?
字符串String转换为jsonArray并解析
好物推荐:移动端开发安全工具
[MySQL series] collection of common working SQL (continuous update)
Button how to dynamically set drawablebottom (setcomposunddrawables is invalid)
Using recursion to find all gray codes with n bits
The goal you specified requires a project to execute but there is no POM
Request method 'POST' not supported
Tiktok practice ~ sharing module ~ short video download (save to photo album)
Summary of alter operation in SQL
Solidity - 合约继承子合约包含构造函数时报错 及 一个合约调用另一合约view函数收取gas费用
wm_ Concat() and group_ Concat() function
知识点总结
项目实战六:分布式事务-Seata
IK分词器
[recommended collection] these 8 common missing value filling skills must be mastered
Boot指标监测
物联网协议的王者:MQTT









