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

    xiaoxiao2022-07-15  154

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)