1.存储过程简介
1.1.概念:存储过程是SQL语句和控制语句预编译的集合,以一个名称存储作为一个单元处理(省去了语法分析和编译的过程提高了效率)。
1)增强了SQL语句的功能和灵活性
2)实现了较快的执行速度
3)减少了网络流量
1.2.
CREATE
[DEFINER = {user | CURRENT_USER}]
PROCEDURE sp_name ([proc_parameter[,......]])
[characteristic ......] rotine_body
1)proc_paramete:[IN | OUT | INOUT] param_name type
2)IN:表示该参数的值必须在调用改存储过程时候被指定,这个值不能被返回。
3)OUT:表示该参数的值可以被存储过程改变,并且可以返回。
4)INOUT:表示该参数调用时指定,并且可以被改变与返回。
5)过程体:和函数体差不多
1.3.创建不带参数的存储过程(查看版本信息)
CREATE
PROCEDURE sp1()
SELECT VERSION();
1.3.1.调用:CALL sp1()或者CALLsp1
1.4. 创建带有IN类型参数的存储过程(删除表记录)
CREATE
PROCENDURE sp2(IN col_name INT UNSIGNED)
BEGIN
DELETE FROM table_name WHERE where_condition;
END
//
1)col_name不能和数据库中的字段名相同,不然所有都会删除。
2)删除存储过程:DROP PROCENDURE sp_name
1.5.创建带有IN类型和OUT类型的存储过程(删除用户并返回用户总数)
CREATE
PROCENDRE sp3(IN col_name INT UNSIGNED, OUT col_name1 INT UNSIGNED )
BEGIN
DELETE FORM table_name WHERE where_condition;
SELECT COUNT(col_name) FROM table_name INTO col_name1
END
//
1)查询返回的参数:SELECT @nums;(@为用户变量)
1.6.自定义函数和存储过程的区别
1)存储过程复杂一些,函数的针对性强
2)返回值个数不一样函数为一个,存储过程可以返回多个
3)存储过程都是独立运行的,而函数一般结合SQL一起使用
注明:存储的ALTER只能修改部分特性,如果要修改过程体,只能删除原有的存储过程再新建。