制作网站模板教程,wordpress 小工具 文本,手机端网站的建设,wordpress 创建报错2023.9.21
函数
含义#xff1a;一组预先编译好的SQL语句的集合#xff0c;理解成批处理语句。
提高代码的重用性简化操作减少了编译次数并且减少了和数据库服务器的连接次数#xff0c;提高了效率
与存储过程的区别#xff1a;
存储过程#xff1a;可以有0个返回一组预先编译好的SQL语句的集合理解成批处理语句。
提高代码的重用性简化操作减少了编译次数并且减少了和数据库服务器的连接次数提高了效率
与存储过程的区别
存储过程可以有0个返回也可以有多个返回适合做批量插入、批量更新。 函数有且仅有1 个返回适合做处理数据后返回一个结果。
下面是函数相关学习笔记
#一、创建语法
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN函数体
END
/*注意
1.参数列表 包含两部分
参数名 参数类型2.函数体肯定会有return语句如果没有会报错
如果return语句没有放在函数体的最后也不报错但不建议return 值;
3.函数体中仅有一句话则可以省略begin end
4.使用 delimiter语句设置结束标记*/#二、调用语法
SELECT 函数名(参数列表)#------------------------------案例演示----------------------------
#1.无参有返回
#案例返回公司的员工个数
CREATE FUNCTION myf1() RETURNS INT
BEGINDECLARE c INT DEFAULT 0;#定义局部变量SELECT COUNT(*) INTO c#赋值FROM employees;RETURN c;END $SELECT myf1()$#2.有参有返回
#案例1根据员工名返回它的工资CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGINSET sal0;#定义用户变量 SELECT salary INTO sal #赋值FROM employeesWHERE last_name empName;RETURN sal;
END $SELECT myf2(k_ing) $#案例2根据部门名返回该部门的平均工资CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE
BEGINDECLARE sal DOUBLE ;SELECT AVG(salary) INTO salFROM employees eJOIN departments d ON e.department_id d.department_idWHERE d.department_namedeptName;RETURN sal;
END $SELECT myf3(IT)$#三、查看函数SHOW CREATE FUNCTION myf3;#四、删除函数
DROP FUNCTION myf3;#案例
#一、创建函数实现传入两个float返回二者之和CREATE FUNCTION test_fun1(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGINDECLARE SUM FLOAT DEFAULT 0;SET SUMnum1num2;RETURN SUM;
END $SELECT test_fun1(1,2)$ 流程控制 流程控制分为顺序、分支、循环。
下面为三种流程控制相关学习笔记
#一、分支结构
#1.if函数
/*
语法if(条件,值1值2)
功能实现双分支
应用在begin end中或外面*/#2.case结构
/*
语法
情况1类似于switch
case 变量或表达式
when 值1 then 语句1;
when 值2 then 语句2;
...
else 语句n;
end 情况2
case
when 条件1 then 语句1;
when 条件2 then 语句2;
...
else 语句n;
end 应用在begin end 中或外面*/#3.if结构/*
语法
if 条件1 then 语句1;
elseif 条件2 then 语句2;
....
else 语句n;
end if;
功能类似于多重if只能应用在begin end 中*/#案例1创建函数实现传入成绩如果成绩90,返回A如果成绩80,返回B如果成绩60,返回C否则返回DCREATE FUNCTION test_if(score FLOAT) RETURNS CHAR
BEGINDECLARE ch CHAR DEFAULT A;IF score90 THEN SET chA;ELSEIF score80 THEN SET chB;ELSEIF score60 THEN SET chC;ELSE SET chD;END IF;RETURN ch;END $SELECT test_if(87)$#案例2创建存储过程如果工资2000,则删除如果5000工资2000,则涨工资1000否则涨工资500CREATE PROCEDURE test_if_pro(IN sal DOUBLE)
BEGINIF sal2000 THEN DELETE FROM employees WHERE employees.salarysal;ELSEIF sal2000 AND sal5000 THEN UPDATE employees SET salarysalary1000 WHERE employees.salarysal;ELSE UPDATE employees SET salarysalary500 WHERE employees.salarysal;END IF;END $CALL test_if_pro(2100)$#案例1创建函数实现传入成绩如果成绩90,返回A如果成绩80,返回B如果成绩60,返回C否则返回DCREATE FUNCTION test_case(score FLOAT) RETURNS CHAR
BEGIN DECLARE ch CHAR DEFAULT A;CASE WHEN score90 THEN SET chA;WHEN score80 THEN SET chB;WHEN score60 THEN SET chC;ELSE SET chD;END CASE;RETURN ch;
END $SELECT test_case(56)$#二、循环结构
/*
分类
while、loop、repeat循环控制iterate类似于 continue继续结束本次循环继续下一次
leave 类似于 break跳出结束当前所在的循环*/#1.while
/*语法【标签:】while 循环条件 do循环体;
end while【 标签】;联想while(循环条件){循环体;
}*/#2.loop
/*语法
【标签:】loop循环体;
end loop 【标签】;可以用来模拟简单的死循环*/#3.repeat
/*
语法
【标签】repeat循环体;
until 结束循环的条件
end repeat 【标签】;*/#1.没有添加循环控制语句
#案例批量插入根据次数插入到admin表中多条记录
DROP PROCEDURE pro_while1$
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGINDECLARE i INT DEFAULT 1;WHILE iinsertCount DOINSERT INTO admin(username,password) VALUES(CONCAT(Rose,i),666);SET ii1;END WHILE;END $CALL pro_while1(100)$/*int i1;
while(iinsertcount){//插入i;}*/#2.添加leave语句#案例批量插入根据次数插入到admin表中多条记录如果次数20则停止
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1$
CREATE PROCEDURE test_while1(IN insertCount INT)
BEGINDECLARE i INT DEFAULT 1;a:WHILE iinsertCount DOINSERT INTO admin(username,password) VALUES(CONCAT(xiaohua,i),0000);IF i20 THEN LEAVE a;END IF;SET ii1;END WHILE a;
END $CALL test_while1(100)$#3.添加iterate语句#案例批量插入根据次数插入到admin表中多条记录只插入偶数次
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1$
CREATE PROCEDURE test_while1(IN insertCount INT)
BEGINDECLARE i INT DEFAULT 0;a:WHILE iinsertCount DOSET ii1;IF MOD(i,2)!0 THEN ITERATE a;END IF;INSERT INTO admin(username,password) VALUES(CONCAT(xiaohua,i),0000);END WHILE a;
END $CALL test_while1(100)$/*int i0;
while(iinsertCount){i;if(i%20){continue;}插入}*/