最近在看一些mysql的视频,随手将自己的笔记分析到博客园,希望可以帮助到你,大家可以共同进步!加油
存储过程
含义:一组预先编译好的sQL语句的集合,理解成批处理语句
语法:
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
(一组合法的SQL语句)
END
参数列表包含三部分: 参数模式 参数名 参数类型
参数模式分3中:
IN :该参数可以作为输入,也就是该参数需要调用方传入值
OUT :该参数可以作为输出,也就是该参数可以作为返回值
INOUT: 该参数既可以作为输入又可以作为输出,也就是既需要传入值又可以返回值
DELIMITER 结束标记
CALL 存储过程名(实参列表)
案例:
1, 创建带in模式参数的存储过程
根据id号,查询对应的身份信息
DELIMITER $
CREATE PROCEDURE mp2(IN id INT)
BEGIN
SELECT * FROM admin ad WHERE ad.id=id;
END $
CALL mp2(005) $
2, 创建out模式存储过程
DELIMITER $
CREATE PROCEDURE myout(IN id INT,OUT username VARCHAR(20))
BEGIN
SELECT admin.`username` INTO username
FROM admin
WHERE admin.`id`=id;
END $
#调用 CALL myout(4,@name)
3,创建带inout模式参数的存储过程
传入a和b两个值,最终a和b都翻倍并返回
DELIMITER $
CREATE PROCEDURE myinout(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
#调用 SET @m=10$ SET @n=20$ CALL myinout(@m,@n)$ SELECT @m,@n$
函数:
菜鸟教程:学习下常用的函数:https://www.runoob.com/mysql/mysql-functions.html
语法:
FUNCTION func_name ( [func_parameter] ) //括号是必须的,参数是可选的 RETURNS type
begin
end
- func_parameters为函数的参数列表,参数列表的形式为:[IN|OUT|INOUT] param_name type
案例:
1,根据ID获取员工姓名与员工工资
DELIMITER //
CREATE FUNCTION GetEmployeeInformationByID(id INT) RETURNS VARCHAR(300)
BEGIN
RETURN(SELECT CONCAT('employee name:',employee_name,'---','salary: ',employee_salary) FROM employees WHERE employee_id=id);
END//
DELIMITER
调用: select GetEmployeeInformationByID(1)
2,创建函数,传入2个float,返回他们的和
DELIMITER //
CREATE FUNCTION getsun(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGIN
RETURN (num1+num2);
END//
调用: SELECT getsun(1,2)
查看数据库的函数或者是方法的操作可以在mysql这个库的pro这个表里面进行查询
流程控制:
含义:
案例:
1,if结构:实现多重分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2; ......
[else 语句n;]
end if;
应用 在begin end 中
案例1、 输入成绩,100-80返回A,80-70返回B,70以下返回C
create FUNCTION return_leavl_test( source int ) returns varchar(20)
BEGIN
if source<=100 and source>=80 then return 'A';
ELSEIF source>=70 then return 'B';
ELSE return 'C';
end IF;
END
调用方法:select return_leavl_test(60)
2、分支结构 ----- if函数 用于任何地方
if函数,实现简单的双分支结构 if(表达式1,表达式2,表达式3)
如果表达式1成立,执行表达式2,如果表达式1失败,执行表达式3
3、case 结构
和java一样的结构
swich ()
case...
或者是:
case 表达式:then
循环:
分类:
while/loop/repeat
控制:
iterate=continue:结束本次,进行下次
leave = break 跳出,结束循环
while语法:
[标签:] while 循环条件 do
循环体;
end while [标签] ;
loop语法:
[标签:] loop
循环体;
end loop [标签];
可以用来模拟简单的死循环
repeat语法:
[标签:] repeat
循环体;
until 结束循环的条件
end repeat [标签];
案例1 没有进行循环控制
-- 循环插入数据存储过程
DROP PROCEDURE insert_0530type_while1
DELIMITER //
CREATE PROCEDURE insert_0530type_while1(IN insertcount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=insertcount DO
INSERT INTO 0530_type(tname) VALUES (CONCAT(i,'test'));
SET i=i+1;
END WHILE;
END//
CALL insert_0530type_while1(10)
案例2. 有循环控制--leave
TRUNCATE TABLE 0530_type;
DELIMITER //
CREATE PROCEDURE insert_0530type_while2(IN insertcount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i<=insertcount DO
INSERT INTO 0530_type(tname) VALUES (CONCAT(i,'test'));
IF i>=20 THEN LEAVE a;
END IF;
SET i=i+1;
END WHILE a;
END//
CALL insert_0530type_while2(30);
案例3 有循环控制--iterate
TRUNCATE TABLE 0530_type;
DELIMITER //
CREATE PROCEDURE insert_0530type_while3(IN insertcount INT)
BEGIN
DECLARE i INT DEFAULT 0;
a:WHILE i<=insertcount DO
SET i=i+1;
IF MOD(i,2)!=0 THEN ITERATE a;
END IF;
INSERT INTO 0530_type(tname) VALUES (CONCAT(i,'test'));
END WHILE a;
END//
CALL insert_0530type_while3(30);
常用案例:
#1、向该表中插入指定个数的,随机的字符串
create table stringcontent(
id int PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(20)
);
delimiter $
CREATE PROCEDURE test_randstr_insert(in insertCount INT)
BEGIN
DECLARE i int DEFAULT 1;#定义一个循环变量i,表示插入的次数
DECLARE str varchar (26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE pro int DEFAULT 1;
DECLARE len int DEFAULT 1;#截取的字符串的长度
WHILE i<=insertCount DO
#SUBSTR(str,pos,len) str=变量str pro=起始索引 len:是截取的长度
set len=FLOOR(RAND()*(20-pro+1)+1);#len这个长度应该是最少是1,最大是26-起始索引+1
set pro=FLOOR(RAND()*26+1);#起始索引应该是从1-26
insert into stringcontent(content)VALUES(SUBSTR(str,pro,len));
SET i=i+1;#循环变量更新
end while;
END $