Mysql储存过程(procedure)与函数(function)是一种封装某种功能到数据库的好办法。可以将某个功能(比如查询最大值或简单的计算)保存到数据库中,这样可以在不同的平台上完成相同的工作。
创建储存过程的mysql语句:
delimiter //意思是将mysql默认的分号断句改为//号断句,当出现分号时mysql不会以为已经结束
create procedure avg_price(out avgprice float) BEGIN SELECT AVG(price) INTO avgprice FROM table_price; END //delimiter ; 将分隔符重新换回分号
如果不使用命令行直接在phpmyadmin里面输入sql的话,可以不用输入delimiter语句
使用这个过程:
call avg_price(@p);
SELECT @p;
结果如下图
/*********************************************************************************/
创建函数:
delimiter //create function caculate_tax(price float)returns float BEGIN declare tax float default 0.05; return price * tax ; END //delimiter ;这个就和普通的函数差不多了,BEGIN和END就相当于花括号和花括号回头、declare相当于var,是用来创建一个临时变量的。
【如果你在创建函数的过程中遇到这样的提示#1418 – This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable),
那么你需要先输入这样的SQL语句:
SET GLOBAL log_bin_trust_function_creators = 1;】
使用函数比较简单:
SELECT caculate_tax(3000);
如果消费税为0.05,可以算出3000元的东西需要收多少税: