存储过程(SQL)

📅 发布时间:2026/7/11 5:00:00 👁️ 浏览次数:
存储过程(SQL)
1.存储过程存储过程Stored Procedure是一组为了完成特定功能的SQL语句集经编译后存储在数据库中用户通过指定存储过程的名字并给定参数如果该存储过程带有参数来调用执行它。2.MySQL存储过程创建1.语法#创建存储过程 CREATE PROCEDURE 存储过程名 ([[IN|OUT|INOUT]] 参数名 数据类型) 过程体; #删除存储过程 DROP PROCEDURE IF EXISTS 存储过程名; #删除存储过程 DROP PROCEDURE IF EXISTS adduser; #创建存储过程 CREATE PROCEDURE adduser(num DOUBLE) BEGIN UPDATE user SET money money - num WHERE name 张三; UPDATE user SET money money num WHERE name 李四; END;2.过程体BEGIN 过程体 END; 过程体每条SQL语句用;隔开3.参数IN不管存储过程里面的参数怎么改变都不影响外部变量。OUT不管参数传入之前的定义是什么在存储过程中都为null。存储过程里面对参数的改变都会影响外部变量。INOUT参数在外部定义后会将定义的变量传入。存储过程里面对参数改变都会影响外部的变量。#IN0 CREATE PROCEDURE add2(IN num INT(20)) BEGIN SET num 111; SELECT num; END; SET a 123; CALL add2(a); SELECT a;#OUT CREATE PROCEDURE add3(OUT num INT(20)) BEGIN SELECT num; SET num 111; END; SET a 123; CALL add3(a); SELECT a;#INOUT CREATE PROCEDURE add3(INOUT num INT(20)) BEGIN SELECT num; SET num 111; SELECT num; END; SET a 123; CALL add3(a); SELECT a;4.变量使用 DECLARE 定义变量只能在存储过程、函数或触发器中使用。变量赋值1.使用 DEFAULT 默认赋值。2.使用 SET 赋值。3.使用 SELECT…INTO… 赋值。DROP PROCEDURE IF EXISTS add1; CREATE PROCEDURE add1() BEGIN #默认值 DECLARE a INT(20) DEFAULT 1; DECLARE b INT(20); DECLARE c VARCHAR(255); #使用set为变量赋值 SET b 2; SELECT a; SELECT b; #使用SELECT...INTO...为变量赋值 SELECT name INTO c FROM user WHERE id 1; SELECT c; END; CALL add1();用户变量用于在 SQL 语句和存储过程之间传递数据。用法变量名在使用用户变量之前最好先初始化它否则它的值将是 null。变量作用域内部变量在其作用域范围内享有更高的优先权当执行到end时内部变量消失不再可见了在存储过程外再也找不到这个内部变量但是可以通过out参数或者将其值指派给会话变量来保存其值。5.调用存储过程CALL 存储过程名;6.分隔符MySQL默认以;为分隔符如果没有声明分割符则编译器会把存储过程当成SQL语句进行处理因此编译过程会报错。所以要事先用 “DELIMITER //” 声明当前段分隔符让编译器把两个 “//” 之间的内容当做存储过程的代码不会执行这些代码。“DELIMITER ;” 的意为把分隔符还原。3.MySQL存储过程的控制语句1.条件语句IF-THEN-ELSE语句IF 条件 THEN SQL语句; END IF; CREATE PROCEDURE methods() BEGIN DECLARE a INT; SET a 1; IF a 1 THEN SELECT a; END IF; END; CALL methods();CASE-WHEN-THEN-ELSE语句CASE 变量名 WHEN 值1 THEN SQL语句; WHEN 值2 THEN SQL语句; ELSE SQL语句; END CASE; CREATE PROCEDURE methods() BEGIN DECLARE a INT; SET a 1; CASE a WHEN 0 THEN SELECT 0,a; WHEN 1 THEN SELECT 1,a; ELSE SELECT ---,a; END CASE; END; CALL methods();2.循环语句WHILE-DO…END-WHILE语句WHILE 条件 DO SQL语句; END WHILE; CREATE PROCEDURE methods() BEGIN DECLARE a INT DEFAULT 0; WHILE a5 DO INSERT INTO user (name,money) VALUES (李明,1000); SET aa1; END WHILE; END; CALL methods();