MySQL自定义函数及触发器_Mysql

来源:脚本之家  责任编辑:小易  
目录
1. 存储函数(自定义函数)1.1 定义存储函数1.2 调用存储函数1.3 删除存储函数2. 触发器2.1 触发器介绍2.2 创建触发器2.3 删除触发器2.4 查看触发器

1. 存储函数(自定义函数)

自定义函数是一种对MySQL扩展的途径,其用法与内置的函数相同。定义函数的两个必要条件:参数、返回值。函数可以返回任意类型的值,同样可以接收这些类型的参数。

关于函数体:

函数体是由合法的SQL语句构成。函数体可以是简单的SELECT或INSERT语句。函数体如果为符合结构则使用BEGIN....AND语句包裹。复合结构可以包含声明、循环、控制结构等等。

重点:自定义的函数不能重名,类似于定义了一个全局变量,变量名不能一致。

1.1 定义存储函数

语法格式:

create function 函数名(参数列表)
returns type(返回值类型)
begin
    --SQL语句
end;

需求:定义一个存储过程的函数,获取满足条件的总记录条数

实现:

delimiter $
create function fun(countryId int)
returns int 
begin
    # 定义一个存储总数据条数的变量
    declare cum int default 0;
    # 查询等于传递参数的全部的数据数,然后将其赋值给定义的变量
 ? ?select count(*) into cum from city where country_id = countryId;
 ? ?# 返回结果值。存储函数必须有返回值
 ? ?return cum;
end $

delimiter ;

1.2 调用存储函数

语法格式:

select 函数名(参数列表);

注意:调用存储过程的时候使用的是call关键字,但是在调用存储函数的时候直接使用select即可,就和调用MySQL一个普通的聚合函数的方式一样即可。

select fun(1);
# 这里和存储过程一样,调用的时候需要加小括号和参数,但是在删除的时候指定函数名即可

1.3 删除存储函数

语法格式

drop [if exists] function fun;

2. 触发器

2.1 触发器介绍

触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性、日志记录以及数据校验等操作。只有增加、删除、修改的时候才可以使用触发器,查询的时候不可以使用触发器。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似对的。MySQL触发器还只支持行级触发,不支持语句级触发。oracle支持行级和语句级触发器都支持。OLD、NEW这两个变量又叫做行记录变量。可以通过这个两个变量来获取即将要操作的数据表中的数据。

2.2 创建触发器

语法格式:

create trigger(触发器) trigger_name(触发器名称)
before/after insert/update/delete
on tab_name(表名)
[for each row](行级触发器)
begin
    trigger_stmt;(触发器的逻辑)
end;

需求:通过触发器记录 emp 表的数据变更日志 emp_logs ,其中包含增加、修改、删除

实现:

分析:一个触发器只能操作一种数据的操作类型,不可以同时完成增加、修改、删除的操作。所以此时需要定义多个触发器来完成这个日志记录的任务。

因为 MySQL中是行级操作的触发器,所以 new 以及 old 中存储的都是一整行数据。

创建执行 insert 的触发器:

使用 new 关键字可以获取到操作的数据,在insert模式下,new变量中存储的就是即将插入的数据使用的是 after ,在执行完表 emp 的新增之后执行这个触发器记录日志。这个触发器什么时候执行与两点有关:必须操作的是 emp 这个表,也就是on后面声明的这个表。必须执行的 insert 操作。

创建执行 update 的触发器:

此时 old 变量中存储的是被修改前的数据,new 变量中存储的是修改之后的数据

创建执行 delete 的触发器:

此时的 old 变量中存储的即将删除的数据

测试:测试都必须是操作的 emp 表,这样才会触发上边定义的触发器。

2.3 删除触发器

语法结构:

drop trigger [schema_name.](数据库名)trigger_name(触发器名);

如果没有指定 schema_name(数据库名),默认为当前数据库。

2.4 查看触发器

可以通过执行 show triggers 命令查看触发器的状态、语法等信息。

语法结构:

show triggers;

到此这篇关于MySQL自定义函数以及触发器的文章就介绍到这了,更多相关MySQL 触发器内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:浅谈mysql 自定义函数MySQL自定义函数简单用法示例MySQL通过自定义函数实现递归查询父级ID或者子级IDMySQL触发器的使用和优缺点介绍详解mysql触发器trigger实例Mysql存储过程、触发器、事件调度器使用入门指南MySQL数据库触发器从小白到精通

  • 本文相关:
  • bitronix 连接 mysql 出现mysqlsyntaxerrorexception 的解决方法
  • sql字符串以及数字常用操作汇总
  • postgresql物化视图(materialized view)过程解析
  • centos 6、7下mysql 5.7 详细安装教程
  • mysql中查询当前时间间隔前1天的数据
  • myeclipse中连接mysql数据库示例代码
  • mysql中对于索引的基本增删查改操作总结
  • mysql 知识点之事务、索引、锁原理与用法解析
  • 浅谈mysql存储过程中declare和set定义变量的区别
  • mysql 5.7.24 安装配置图文教程
  • 如何使用php 创建mysql中的存储过程,函数,和触发器
  • 求mysql触发器实现两日期相隔的天数代码!用计算日期差的函数...
  • 计算机mysql触发器中创建触发器里面监视的table和下面的new...
  • mysql5.1触发器中支持动态执行语句吗
  • 求高人介绍MySQL的datediff函数
  • MySQL 5.0触发器参考教程第1/4页
  • mysql可以触发器里面带触发器吗
  • mysql触发器原生支持调用外部程序么
  • php 怎么实现mysql触发器效果?
  • Sqlserver与Mysql触发器有什么差别呢?
  • 关于mysql中触发器old和new如何更好的区别我有话要说
  • mysql触发器使日期相加减?
  • MySQL 触发器的基础操作(六)
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mysql浅谈mysql 自定义函数mysql自定义函数简单用法示例mysql通过自定义函数实现递归查询父级id或者子级idmysql触发器的使用和优缺点介绍详解mysql触发器trigger实例mysql存储过程、触发器、事件调度器使用入门指南mysql数据库触发器从小白到精通bitronix 连接 mysql 出现mysqlsyntaxerrorexception 的解决方法sql字符串以及数字常用操作汇总postgresql物化视图(materialized view)过程解析centos 6、7下mysql 5.7 详细安装教程mysql中查询当前时间间隔前1天的数据myeclipse中连接mysql数据库示例代码mysql中对于索引的基本增删查改操作总结mysql 知识点之事务、索引、锁原理与用法解析浅谈mysql存储过程中declare和set定义变量的区别mysql 5.7.24 安装配置图文教程mysql安装图解 mysql图文安装教程(详细说明)can""""t connect to mysql servwindows下mysql5.6版本安装及配置过程附有截图和mysql字符串截取函数substring的用法说明mysql提示:the server quit withoumysql之timestamp(时间戳)用法详解mysql创建用户与授权方法mysql——修改root密码的4种方法(以windows为mysql日期数据类型、时间类型使用总结mysql查看版本号的几种方式mysql8.0 json_contains的使用说明远程连接mysql 授权方法详解innodb实现序列化隔离级别的方法mysql高可用架构之mha架构全解mysql可视化工具navicat的连接方法mysql自定义函数简单用法示例mysql explain使用详解mysql根据时间查询日期的优化技巧nacos配置mysql8的方法mysql增加和删除索引的相关操作
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved