文章目录
存储过程
- 这里的知识点分为两个部分:
- 一个是:存储过程
- 一个是:存储函数(也称为用户自定义函数)
- 两者之间的区别:
- 与存储过程唯一不同的一点是,存储函数在执行后会返回一个值。
- 存储函数的使用范围:
- 存储函数返回的值可以在
SELECT
和UPDATE
等命令中和普通函数一样使用。
1、创建存储函数的基本语法:
# 创建存储过程的基本语法的使用:
create procedure functionName (params DataType) returns ReturnDataType
begin
SQL语句
return 返回值.表达式
end
1.1、如果发现使用不了存储函数的话,需要执行的操作:
存储函数有可能对复制(→ 11.5.3 节)和数据的恢复产生影响。因此,参数 log_bin_trust_function_creators
的初始值被设置为 0,这样就不能使用存储函数了 。要想使用存储函数,就需要执行下面的操作修改此设置:
SET GLOBAL log_bin_trust_function_creators=1
若想查看对应的变量的值,可以使用如下的指令来进行信息的查看:
show variables like "log_bin_trust_function_creators";
如果 log_bin_trust_function_creators
被设置成了 ON
,就可以使用存储函数了。
我们发现对应的全局变量中的值已经发生了改变;root
是默认的具有相关的创建存储函数的权限的。但是普通的用户需要赋值。不是默认具有的。
1.2、创建变量的方法:
declare 变量名 数据类型;
使用这样的方式,来创建一个变量。
并且,对应的赋值操作如下所示:
declare variableName DataType
select
avg(*)
into variableName
from
tablename;
1.3、显示和展示函数:
对应的两个常使用的两个语句:
show create function FunctionName;
drop function FunctionName;
2、触发器
2.1、什么是触发器?:
触发器(
trigger
)是一种对表执行某操作后会触发执行其他命令的机制
触发器就是针对某一个动作,而引发的一系列的操作;下面创建一个如下所示的触发器:
当一张表user
中的数据被删除的时候,对应的被删除的记录将会被保存在另一张表user_remove
中。
2.2、触发器的创建:
触发的时机有:
- 在动作前,触发
- 在动作后,触发
触发器监听的动作:
insert
:只能在操作后提取数据。update
:什么时候都可以提取数据。delete
:只能在操作前,提取数据。
触发器的列值:
OLD. 列名 | 对表进行处理之前的列值 |
---|---|
NEW. 列名 | 对表进行处理之后的列值 |
对应的触发器的创建的格式如下所示:
CREATE TRIGGER 触发器名 BEFORE(或者 AFTER) DELETE 等命令
ON 表名 FOR EACH ROW
BEGIN
使用更新前(OLD. 列名)或者更新后(NEW. 列名)的处理
END
尝试来来进行对应的触发器的创建和使用:
select database();
create table user_insert like user;
show tables;
# 对应的输出为:
# user
# user_insert
# user_time
# 发现对应的 table 我们已经成功的创建;
desc user_insert;
delimiter //
create trigger trOne before insert
on old_tableName for each row
begin
insert into new_table values (NEW.empid, NEW.age, NEW.month);
end
//
delimiter ;
insert into old_tableName values(xxx,xxx,xxx);
# 查看检测的表格中的所有的内容。
select * from new_table;
对应的操作结果为:
A110,30,100
A109,33,50
我们,发现在触发器被创建完毕之后将会自动的使用。
2.3、触发器的删除和确认操作:
drop trigger triggerName;
show trigger triggerName;