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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:

本节书摘来自华章计算机《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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
22天前
|
关系型数据库 MySQL 数据处理
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
|
9月前
|
存储 SQL 安全
数据库SQL Server 9-10 章(存储过程与触发器)
数据库SQL Server 9-10 章(存储过程与触发器)
152 0
|
9月前
|
存储 SQL 数据库
数据库视频第九章存储过程(一)
数据库视频第九章存储过程(一)
|
10月前
|
SQL 存储 运维
MySQL基础篇——MySQL数据库客户端连接,数据模型,SQL知识
MySQL基础篇——MySQL数据库客户端连接,数据模型,SQL知识
122 0
|
10月前
|
存储 SQL NoSQL
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
434 0
|
10月前
|
存储 SQL 关系型数据库
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
278 0
|
SQL 数据库连接 数据库
C#常见控件与SQL Sever数据库交互
首先,我们采用DataSet作为临时的数据库,这样会比较好
|
存储 SQL 安全
数据库教程:项目6 创建与使用存储过程
数据库项目6教程,包含相关语法和实例,能够建立起初步的认识和了解
232 0
数据库教程:项目6 创建与使用存储过程
|
SQL 存储 数据库
SQL使用链接服务器执行远程数据库上的存储过程
原文:SQL使用链接服务器执行远程数据库上的存储过程   --创建链接服务器 exec sp_addlinkedserver'server_tmp','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin'server_tmp','fa...
1401 0
|
关系型数据库 MySQL 数据库