1.存储过程和函数的区别
1)存储过程是用户定义的SQL语句序列的集合。函数通常不涉及特定的用户表。
2)一个函数只能返回一个变量;一个存储过程可以返回多个。
3)存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类
4)存储过程声明不需要返回类型,函数声明需要描述返回类型,而函数体必须包含有效的RETURN语句。
5)在SQL语句中存储过程不可用,但可以使用函数。
存储过程示例:
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; #将语句的结束符号恢复为分号
call delete_matches(57);
函数示例:
mysql> DELIMITER //
mysql> CREATE FUNCTION CountProc2 ( sid INT )
-> RETURNS INT
-> BEGIN
-> RETURN ( SELECT COUNT(*) FROM fruits WHERE s_id = sid );
-> END //
Query OK, 0 rows affected (0.10 sec)
mysql> DELIMITER ;
存储过程的优点和缺点
优点:
1.执行速度快。存储过程只需要编译一次,以后无需编译就可以执行,所以使用存储过程可提高数据库执行速度
2.减少网络I/O
3.存储过程可以重复使用,可减少开发人员的工作量
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
缺点:
1.调试麻烦
2.可移植性差
2.触发器
DML触发器:当数据库服务器中发生数据操作语言事件时执行的存储过程,分为:After触发器、Before触发器和instead of触发器
DDL触发器:特殊的触发器,在响应数据定义语言(DDL)语句时触发,一般用于数据库中执行管理任务。DDL触发器是响应create、after、或drop开头的语句而激活