《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介:

本节书摘来自华章计算机《PostgreSQL服务器编程》一书中的第1章,第1.4节,作者:(美)Hannu Krosing, Jim Mlodgenski, Kirk Roybal 著
,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 使用触发器管理相关数据

服务器程序设计也包括了对自动化的动作(触发器)的设定。设定了自动化动作后,数据库中的一些操作便可触发其他一些事情也跟随发生。例如,你可以设定一个处理过程,一边对一些商品进行供给,一边在库存表里进行自动预订处理。
所以,让我们创建一个水果库存表:
image

这里,CHECK约束对一些基本规则的执行进行了限制:你不能有多于1000的水果库存(太多了可能会坏掉),你也不能有负的库存,同时你不能为别人供给多余当前库存的水果。
image

这个offer表为每次供给设定一个ID(保证你可以区分以后的每一次供给)、接收者、日期、供给水果的名称和供应数量。
为了完成自动化的库存管理,你首先需要一个触发器函数。这个函数可以实现管理逻辑:
image

你必须告诉PostgreSQL,在每次供应行被改变的时候,调用这个函数:
image

这步完成之后,我们准备测试一下它的功能。首先,我们将添加一些水果到库存中:
image

然后,我们核对这个库存(这里使用扩展显示):
image
image

接下来,我们进行一次供应动作,将100个苹果供应给Bob:
image

在核对库存这一步,我们看到100个苹果确实已经预订了:
image

如果我们改变了供应数量,预订情况就会跟着变化:image

image

我们也获得了一些额外的好处。首先,因为库存表上的约束,你不能卖出已经预订的苹果:
image

更有趣的是,虽然这个约束是在另外一张表上,但是你也不能预订超出你现有数量的苹果:
image

当你最终决定删除供应的时候,之前的预订则会被解除:
image

在现实的系统中,你可能在删除之前,要先获取之前的供应情况。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
关系型数据库 MySQL 数据处理
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
212 0
|
10月前
|
SQL
【YashanDB 知识库】通过触发器复制 varchar(4000 char) 列的数据导致乱码
**问题简介:** 客户在使用触发器将表 A 中 varchar(4000 char) 列的数据复制到表 B 时,发现表 B 中的数据出现乱码且与表 A 不一致。此问题影响所有 YashanDB 版本,原因是 YashanDB 在处理触发器场景下的大长度 varchar 数据复制时存在机制错误。为避免该问题,建议将列长度修改为 varchar(2000 char) 或更小。数据正确性无法保证,需谨慎处理。 **验证方法:** 可通过创建表 A 和 B 及相应触发器进行测试。
【YashanDB 知识库】通过触发器复制 varchar(4000 char) 列的数据导致乱码
|
9月前
|
SQL
【YashanDB知识库】通过触发器复制varchar(4000 char)列的数据导致乱码
【YashanDB知识库】通过触发器复制varchar(4000 char)列的数据导致乱码
|
10月前
|
SQL
【YashanDB 知识库】通过触发器复制 varchar(4000 char) 列的数据导致乱码
**简介:** 某客户在使用触发器将表 A 的 varchar(4000 char) 列数据复制到表 B 时,出现数据乱码且不一致的问题。经分析,YashanDB 在处理触发器场景下的 varchar(4000 char) 列数据复制时存在机制错误,影响所有版本。建议将列长度修改为 varchar(2000 char) 或更小以规避问题。通过特定 SQL 可验证该问题是否存在。
|
SQL 存储 数据处理
"SQL触发器实战大揭秘:一键解锁数据自动化校验与更新魔法,让数据库管理从此告别繁琐,精准高效不再是梦!"
【8月更文挑战第31天】在数据库管理中,确保数据准确性和一致性至关重要。SQL触发器能自动执行数据校验与更新,显著提升工作效率。本文通过一个员工信息表的例子,详细介绍了如何利用触发器自动设定和校验薪资,确保其符合业务规则。提供的示例代码展示了在插入新记录时如何自动检查并调整薪资,以满足最低标准。这不仅减轻了数据库管理员的负担,还提高了数据处理的准确性和效率。触发器虽强大,但也需谨慎使用,以避免复杂性和性能问题。
241 1
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
188 0
|
SQL 关系型数据库 MySQL
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
326 0
|
SQL 存储 Oracle
oracle触发器和webservice数据推送
oracle触发器和webservice数据推送
312 0
|
存储 SQL 监控
MySQL的触发器——自动智能化的数据维护
MySQL的触发器——自动智能化的数据维护
365 0
MySQL的触发器——自动智能化的数据维护

热门文章

最新文章