达梦数据库的替代(instead of )触发器使用一例
达梦数据库的替代(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 )触发器使用一例相关推荐
- 达梦数据库group by的两个替代方案
在达梦数据库中,如果出现类似于以下的 SQL 语句: SELECT column1, column2, COUNT(*) FROM table GROUP BY column1, column2; 而 ...
- 关于达梦数据库的一些浅显思考
关于达梦数据库的一些浅显思考 一.什么是达梦数据库 随着信息技术不断发展,达梦数据库也在不断的演进,从最初的数据库管理系统原型 CRDS 发展到 2019 年的 DM8 .1988 年原华中理工大学( ...
- 达梦数据库常见问题汇总
目录 问题一 以图形界面 安装数据库软件时报错 现象描述 问题原因 解决方法 问题二 DM数据库遇到 "无效的表名或视图名"报错 现象描述 问题原因 解决方法 问题三 利用DM ...
- 开源盛行:为什么学习国产达梦数据库?
开源盛行:为什么学习国产达梦数据库? 武汉达梦数据库股份有限公司成立于2000年,是国内领先的数据库产品开发服务商,国内数据库基础软件产业发展的关键推动者.公司为客户提供各类数据库软件及集群软件.云计 ...
- oracle向达梦迁移工作量,从Oracle安全移植到国产达梦数据库的DBA实践
随着我国对信息安全和自主可控技术的日益重视,国产数据库在党政机关.军队和大型央企等行业中得到了快速应用.达梦数据库(以下简称DM)是国内数据库行业领军企业--达梦推出的一款自主可控的高性能数据库产品. ...
- zabbix mysql 表空间_Zabbix监控达梦数据库表空间
技术实现思路 利用Zabbix监控工具的定制功能.借鉴Zabbix对Oracle的监控原理,实现达梦数据库表空间监控.通过自动发现脚本发现达梦数据库表空间,然后再制定额外的属于达梦表空间的监控项,配置 ...
- 达梦数据库操作记录_达梦数据库常用功能及命令记录 -- 持续更新
达梦数据库常用功能及命令记录 -- 持续更新 达梦数据库常用功能及命令记录 达梦数据库语句的使用总体来说跟 oracle 很接近的, 这篇文章主要是把常用的情况和语句做了记录, 并且后续还会不断的持续 ...
- 2数据库表空间容量查询_Zabbix监控达梦数据库表空间
技术实现思路 利用Zabbix监控工具的定制功能.借鉴Zabbix对Oracle的监控原理,实现达梦数据库表空间监控.通过自动发现脚本发现达梦数据库表空间,然后再制定额外的属于达梦表空间的监控项,配置 ...
- 达梦数据库兼容Oracle之SQL语法(一)
对于刚从Oracle数据库转到达梦数据库,SQL语法的使用基本一致,有一些差别,下面总结的一些常用SQL语法差别. 文章目录 1.导入数据 2.返回查询数据的返回行 3 外连接用法 4.多列IN用法 ...
最新文章
- MDA模型定义及扩展
- 是什么阻止了自动驾驶汽车上路?
- 内存对齐与sizeof
- 智慧城市成为国家战略 浙江同兴股份乘势迈进
- solrcloud使用中遇到的问题及解决方式
- 微软对键盘上的Page Up Page Down按钮享有专利权
- Tomcat本地正常!但是部署到服务器后,mysql插入中文乱码问题解决!
- python语言特点粘性扩展_【语言处理与Python】9.2处理特征结构\9.3扩展基于特征的文法...
- 由一个activity跳转到另一个activity
- (C/C++学习笔记)附页: C/C++变量的存储类型
- sublime livereload插件
- Python3.x:pyodbc调用sybase的存储过程
- 软件开发工作过程中的一些总结
- win10商店下载位置_教你win10设置应用商店中应用默认安装位置教程
- IDEA学习篇——finds duplicated code提示
- php获取指定日期的节假日信息
- 婚纱预订小程序开发,商家线上展示平台
- C语言深度学习之嵌套循环例题(金字塔模型)
- HTML5期末大作业:在线音乐网站设计——简洁bootstrap响应式社交音乐网站模板html整站(38页) HTML+CSS+JavaScript
- 百度网盘搜索工具_2019