达梦数据库的替代(instead of )触发器使用一例

  • 1. 使用场景说明
  • 2. 场景举例
  • 3. 实现
    • 3.1 创建表
    • 3.2 编写触发器
  • 4.测试
    • 4.1 预期结果
    • 4.2 测试截图
  • 5.结束语

1. 使用场景说明

在某些连续运行的数据库应用场景中,经常使用一段后台程序(通常做成守护进程)对数据进行自动入库,如气象或地震部门的资料收集成序就是这样,当源数据有修改时,也需要对数据库进行更新,使数据库中的数据保持最新。如果使用高级编程语言程序来实现也是可以的,但是有一个缺点,就是要多次查询数据库,一旦数据已存在,则进行update,否则进行插入操作。如果用instead触发器来做,高级语言程序则可以非常简单,且可以降低通信次数,效率将有所提高。

2. 场景举例

利用Instead of 触发器,首先利用new表检查是否满足数据插入条件,如果满足则进行插入,否则就进行更新。
比如有个气象台站的数据表如下:
站号 时间 气温 气压 雨量 风速 风向
56778 2021-01-12 13:00:00 12 1019 0 2 120
56765 2021-01-12 13:00:00 16 1011 0 3 135
56796 2010-01-12 13:00:00 18 900 3.5 4 232
… … … … … … …
一般台站正常情况下传上来的报文会即时入库,但有时仪器有偏差时,需要人工更正后再传更正报对预先插入的数据进行修正,这时由于数据库表中已有一条数据,需要对其进行修改,使数据库中的数据正确,用前端程序实现首先得判断有没有这条数据,有的话则更行update操作,否则进行insert操作。如果采用instead of 触发器实现,则可以很容易解决这个问题,客户端只须进行插入就可以了,不需要判断逻辑,程序将会清晰很多。

3. 实现

3.1 创建表

连接达梦数据库,创建一张weather的表:CREATE TABLE WEATHER(STATION_ID CHAR(5),RTIME TIMESTAMP,
TEMP FLOAT DEFAULT -273.15,PRESSURE FLOAT DEFAULT -999,RAIN FLOAT DEFAULT -999,WIND_V FLOAT,WIND_D FLOAT)

3.2 编写触发器

CREATE OR REPLACE TRIGGER tri_weather_insert
INSTEAD OF INSERT ON V_WEATHER–替换原来的insert语句
FOR EACH ROW
BEGIN
if not exists(SELECT * FROM WEATHER WHERE station_id=:new.station_id AND rtime=:new.rtime) THEN–没有则插入
INSERT INTO WEATHER(station_id,rtime,temp,pressure,rain,wind_v,wind_d) VALUES(:new.station_id,:new.rtime,:new.temp,:new.pressure,:new.rain,:new.wind_v,:new.wind_d);
ELSE --有则更新
UPDATE WEATHER SET temp=:new.temp,pressure=:new.pressure,rain=:new.rain,wind_v=:new.wind_v,wind_d=:new.wind_d
WHERE station_id=:new.station_id AND rtime=:new.rtime;
END IF;
END;

4.测试

4.1 预期结果

当向视图中插入一条新的记录时,表上应执行插入(INSERT)操作;当向视图中插入原有台站同一个时间的数据时,则执行更新(UPDATE)操作。

4.2 测试截图

插入三条记录后,表中记录如上图所示。当第一条记录的雨量(RAIN)更正为5时,再执行一条如下的语句,则表中的记录变为:
插入三条记录后,表中记录如上图所示。当第一条记录的雨量(RAIN)更正为5时,再执行一条如下的语句,则表中的记录变为:
这样就实现了气象台站数据的自动更正,不需要采用前端代码进行数据逻加判断。

5.结束语

采用数据库触发器、存储过程可以提高程序的通信效率,可以简化编程。作为数据库管理、开发员或数据架构师,有时需要从数据库的角度去帮助团队考虑数据架构的优化问题,使自已在团队中获得加分。

达梦数据库的替代(instead of )触发器使用一例相关推荐

  1. 达梦数据库group by的两个替代方案

    在达梦数据库中,如果出现类似于以下的 SQL 语句: SELECT column1, column2, COUNT(*) FROM table GROUP BY column1, column2; 而 ...

  2. 关于达梦数据库的一些浅显思考

    关于达梦数据库的一些浅显思考 一.什么是达梦数据库 随着信息技术不断发展,达梦数据库也在不断的演进,从最初的数据库管理系统原型 CRDS 发展到 2019 年的 DM8 .1988 年原华中理工大学( ...

  3. 达梦数据库常见问题汇总

    目录 问题一 以图形界面 安装数据库软件时报错 现象描述 问题原因 解决方法 问题二  DM数据库遇到 "无效的表名或视图名"报错 现象描述 问题原因 解决方法 问题三  利用DM ...

  4. 开源盛行:为什么学习国产达梦数据库?

    开源盛行:为什么学习国产达梦数据库? 武汉达梦数据库股份有限公司成立于2000年,是国内领先的数据库产品开发服务商,国内数据库基础软件产业发展的关键推动者.公司为客户提供各类数据库软件及集群软件.云计 ...

  5. oracle向达梦迁移工作量,从Oracle安全移植到国产达梦数据库的DBA实践

    随着我国对信息安全和自主可控技术的日益重视,国产数据库在党政机关.军队和大型央企等行业中得到了快速应用.达梦数据库(以下简称DM)是国内数据库行业领军企业--达梦推出的一款自主可控的高性能数据库产品. ...

  6. zabbix mysql 表空间_Zabbix监控达梦数据库表空间

    技术实现思路 利用Zabbix监控工具的定制功能.借鉴Zabbix对Oracle的监控原理,实现达梦数据库表空间监控.通过自动发现脚本发现达梦数据库表空间,然后再制定额外的属于达梦表空间的监控项,配置 ...

  7. 达梦数据库操作记录_达梦数据库常用功能及命令记录 -- 持续更新

    达梦数据库常用功能及命令记录 -- 持续更新 达梦数据库常用功能及命令记录 达梦数据库语句的使用总体来说跟 oracle 很接近的, 这篇文章主要是把常用的情况和语句做了记录, 并且后续还会不断的持续 ...

  8. 2数据库表空间容量查询_Zabbix监控达梦数据库表空间

    技术实现思路 利用Zabbix监控工具的定制功能.借鉴Zabbix对Oracle的监控原理,实现达梦数据库表空间监控.通过自动发现脚本发现达梦数据库表空间,然后再制定额外的属于达梦表空间的监控项,配置 ...

  9. 达梦数据库兼容Oracle之SQL语法(一)

    对于刚从Oracle数据库转到达梦数据库,SQL语法的使用基本一致,有一些差别,下面总结的一些常用SQL语法差别. 文章目录 1.导入数据 2.返回查询数据的返回行 3 外连接用法 4.多列IN用法 ...

最新文章

  1. MDA模型定义及扩展
  2. 是什么阻止了自动驾驶汽车上路?
  3. 内存对齐与sizeof
  4. 智慧城市成为国家战略 浙江同兴股份乘势迈进
  5. solrcloud使用中遇到的问题及解决方式
  6. 微软对键盘上的Page Up Page Down按钮享有专利权
  7. Tomcat本地正常!但是部署到服务器后,mysql插入中文乱码问题解决!
  8. python语言特点粘性扩展_【语言处理与Python】9.2处理特征结构\9.3扩展基于特征的文法...
  9. 由一个activity跳转到另一个activity
  10. (C/C++学习笔记)附页: C/C++变量的存储类型
  11. sublime livereload插件
  12. Python3.x:pyodbc调用sybase的存储过程
  13. 软件开发工作过程中的一些总结
  14. win10商店下载位置_教你win10设置应用商店中应用默认安装位置教程
  15. IDEA学习篇——finds duplicated code提示
  16. php获取指定日期的节假日信息
  17. 婚纱预订小程序开发,商家线上展示平台
  18. C语言深度学习之嵌套循环例题(金字塔模型)
  19. HTML5期末大作业:在线音乐网站设计——简洁bootstrap响应式社交音乐网站模板html整站(38页) HTML+CSS+JavaScript
  20. 百度网盘搜索工具_2019

热门文章

  1. LED发光二极管限流电阻的计算
  2. 在web网页中打开word文档
  3. 鸡汤穷三代,励志毁一生 | 互联应用网
  4. 面试真题纠错(京东、爱奇艺)
  5. matlab中exp(liangx),Matlab基础知识
  6. 一对一直播app大热,使用源码或自主开发一对一APP需要了解哪些技术?...
  7. 阳台这样装洗衣柜更漂亮
  8. 高斯消去法解线性方程组C++实现
  9. springboot网吧管理系统
  10. 360全景拍摄为什么要使用鱼眼镜头,与超广角镜头区别?