且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-10-02 18:53:33

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

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

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

这里,CHECK约束对一些基本规则的执行进行了限制:你不能有多于1000的水果库存(太多了可能会坏掉),你也不能有负的库存,同时你不能为别人供给多余当前库存的水果。
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

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

你必须告诉PostgreSQL,在每次供应行被改变的时候,调用这个函数:
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

这步完成之后,我们准备测试一下它的功能。首先,我们将添加一些水果到库存中:
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

然后,我们核对这个库存(这里使用扩展显示):
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

接下来,我们进行一次供应动作,将100个苹果供应给Bob:
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

在核对库存这一步,我们看到100个苹果确实已经预订了:
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

如果我们改变了供应数量,预订情况就会跟着变化:《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

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

我们也获得了一些额外的好处。首先,因为库存表上的约束,你不能卖出已经预订的苹果:
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

更有趣的是,虽然这个约束是在另外一张表上,但是你也不能预订超出你现有数量的苹果:
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

当你最终决定删除供应的时候,之前的预订则会被解除:
《PostgreSQL服务器编程》一一1.4 使用触发器管理相关数据

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