big data 通常情况下,当我们输入SQL命令以后,MySQL引擎首先分析SQL命令的语法格式是否正确,如果正确则编译成MySQL引擎可以识别的命令,然后开始执行命令,最后将执行的结果返回给客户端。如果要将这个过程中的语法分析和编译的过程省略掉,那么MySQL的执行效率就会提升,这时就需要用到存储过程。 SQL命令执行流程 存储过程就是SQL语句和控制语句的预编译集合,以一个名称存储作为一个单元来进行处理。有点类似于自定义函数,可以由应用程序调用执行,允许用户声明变量并且进行流程控制,存储过程可以接受输入类型的参数也可以接受输出类型的参数,并且可以由多个返回值。 存储过程的优点: (1)由于在存储过程中可以写控制语句,因此使SQL语句的灵活性增强。 (2)存储过程只有在第一次执行时才进行分析和编译,在以后的执行过程中不再需要,因此执行速度快。 (3)单独发送SQL语句让服务器执行提交的信息量大,用存储过程只要把用到的参数传过去就可以,减少了网络流量。 创建存储过程的语法格式 其中IN表示这个参数必须在调用的时候指定,这个值不能被返回,OUT表示参数的值可以在存储过程中被改变,而且这个值可以返回,INOUT表示这个参数在调用是指定,可以在存储过程中被改变,也可以返回。 存储过程中的过程体必须由合法的SQL语句构成,SQL语句包括CURD以及多表连接查询,过程体如果是复合结构则要用BEGIN...END将语句包含在内,在复合结构中可以使用流程控制语句,循环语句等。存储过程是用关键字CALL来调用。 (1)创建带IN类型参数的存储过程示例: CREATE PROCEDURE remove_student_byId(in id INT UNSIGNED)DELETE FROM student WHERE stu_id = id; (2)创建带有IN和OUT类型参数的存储过程: CREATE PROCEDURE remove_student_return_num(IN id INT UNSIGNED,OUT num INT UNSIGNED) BEGIN DELETE FROM student WHERE stu_id = id;SELECT COUNT(stu_id) FROM student into num;END 存储过程与自定义函数的区别: 存储过程与自定义函数的区别 |
|