Java学习笔记-Day62 MySQL高级(三)
一、函数
1、函数的创建和调用
(1)创建函数的语法:
create function 函数名(参数名 参数类型,… ) returns 返回值类型
BEGIN
语句
return 返回值;
END
如果在创建函数出现如下错误,则执行如下语句。
show variables like '%func%';
set global log_bin_trust_function_creators=1;
(2)调用函数的语法:
select 函数名(值,…);
2、时间格式转换的案例
日期格式:2016-12-5 14:34:50
转换为2016年12月5日14时35分50秒
- 创建函数
create function fn_getDate(p_date datetime) returns varchar(100)
BEGIN
declare v_result varchar(100) DEFAULT '';
set v_result = DATE_FORMAT(p_date,'%Y年%m月%d日%h时%i分%s秒');
return v_result;
end
- 调用函数
select fn_getDate(now());
注意:只能在语句或者存储过程中使用,不能单独调用。
3、函数和存储过程的区别
函数一定有一个返回值,调用的时候直接使用select语句。
过程只能有输入参数或者输出参数,调用的时候用call语句。
二、触发器
1、触发器的简介
触发器是一种特殊的存储过程,由MySQL自动执行(新增、修改、删除的时候,自动调用),用户没有办法执行。
触发器是与表(触发器建立在表上)有关的数据库对象,在满足定义条件时触发,执行触发器中定义的语句集合。
注意:触发器只能创建在永久表上,不能对临时表创建触发器。
2、触发时间和触发事件
触发时间(trigger_time):可以是BEFORE或者AFTER。
触发事件(trigger_event):可以是INSERT、UPDATE、DELETE。
3、作用
(1)审计:对一个的表增、删、改的操作进行记录。
(2)数据的合法性检查,比如银行账户的余额,可以限制大于0。
(3)对其它表的数据进行同步处理、对其它的表同步修改
4、old表和new表
old表:保存的是删除之前的数据、修改之前的旧数据。
new表:保存的是添加的新数据、修改之后新数据。
old表和new表都是临时表,只有在触发器运行时才存在。
5、级联的修改
(1)选择表 —> 鼠标右键 —> 设计表 —> 触发器。
(2)创建触发器:输入触发器名,选择触发时间和触发事件,在下方定义出写入需要执行的SQL语句。
如果discuss表的userid为外键,则需要设置外键的 更新时 为 CASCADE。