MySQL如何自定义函数及触发器


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这两个变量又叫做行记录变量。可以通过这个两个变量来获取即将要操作的数据表中的数据。

MySQL如何自定义函数及触发器

2.2 创建触发器

语法格式:

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

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

实现:

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

Mootion Mootion

Mootion是一个革命性的3D动画创作平台,利用AI技术来简化和加速3D动画的制作过程。

Mootion 232 查看详情 Mootion

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

创建执行 insert 的触发器:

MySQL如何自定义函数及触发器

  • 在insert模式下,使用关键字new可以获得要插入的数据

  • 使用的是 after ,在执行完表 emp 的新增之后执行这个触发器记录日志。

  • 这个触发器什么时候执行与两点有关:

    • 必须操作的是 emp 这个表,也就是on后面声明的这个表。

    • 必须执行的 insert 操作。

创建执行 update 的触发器:

MySQL如何自定义函数及触发器

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

创建执行 delete 的触发器:

MySQL如何自定义函数及触发器

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

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

MySQL如何自定义函数及触发器

2.3 删除触发器

语法结构:

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

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

2.4 查看触发器

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

语法结构:

show triggers;

以上就是MySQL如何自定义函数及触发器的详细内容,更多请关注其它相关文章!


# 都是  # 重庆网站优化外包公司  # 厦门网站建设首去林洁  # 高埗网站建设流程  # 城口县的知名网站建设  # 婚礼纪seo成功的原因  # 绵竹营销型网站建设  # 章丘优化型网站  # 企业域名网站建设  # 静安营销推广客服热线  # 手机网站建设原则  # MySQL  # 条数  # 全局变量  # 可以通过  # 返回值  # 不可以  # 存储过程  # 的是  # 镜像  # 自定义 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  多闪APP官方下载安装入口_多闪最新版本获取入口  实现可重用自定义Python Range类  Yandex浏览器官方入口_Yandex搜索引擎中文版  折叠屏手机充不进电是什么问题? 特殊结构带来的维修难点  《豆瓣》私信用户方法  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  抖音猜你想搜能说明对方搜过吗  优化Flask模板中SQLAlchemy查询迭代标签:处理字符串空格问题  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  申通快递物流信息查询 申通快递包裹状态追踪  J*a列表元素格式化输出教程  鲨鱼剧场app金币获取方法  从J*a应用程序中导出MySQL表数据的技术指南  《真我》申请退款方法  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  tiktok国际版入口_tiktok官网网页版链接  纯CSS实现滚动时动态时间轴线条颜色填充效果  支付宝登录刷脸不是本人如何解决  Highcharts雷达图径向轴数值标签实现教程  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  如何在CSS中使用伪类选择器_hover实现悬停效果  《合金装备4》有望推出重制版!制作人发话了  中通快递官网指定查询 中通快递单号查询平台入口  51漫画网实时入口 51漫画网页版官方免费漫画入口  德邦快递收费标准详解  QQ邮箱手机版网页版 QQ邮箱登录入口地址  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  优化 WooCommerce 产品价格显示与自定义短代码集成  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法  ao3入口镜像地址 ao3镜像入口可靠跳转  驱动人生:游戏修复指南  VS Code源代码管理(SCM)视图的进阶使用技巧  mysql中如何分析索引使用情况_mysql索引使用分析方法  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  QQ网站入口直接登录 QQ官方正版登录页面  《oppo商城》维修服务位置  C++ optional用法详解_C++17处理可能为空的返回值  b站怎么用微信登录_b站微信登录方法  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  企查查官网和爱企查 企查查企业查询官网入口  CSS过渡与滚动滚动事件结合应用_scroll与transition动画 

 2023-06-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.