代码之家  ›  专栏  ›  技术社区  ›  Harald

H2使用计算列表达式自动维护行的use count列

  •  0
  • Harald  · 技术社区  · 8 年前

    如何在H2中定义一个computedColumnExpression,该表达式随行的每次更新递增一个行字段,并从零开始。

    根据定义,每次更新时都会运行computedColumnExpression。但是

    • 如何引用更新行的usecount字段的上一个值,以及
    • 如何处理初始插入?

    我将从以下列定义开始

    "usecount" INT4 (1+(SELECT IFNULL("usecount",0) from "data" WHERE ID=XXXX))
    

    但是XXXX应该使用什么?

    我看了一下触发器,想更新一下 newRow fire 方法,但这似乎没有任何效果。

    给出第一个答案和我的失败尝试,我需要指出表已经存在,并且我需要表定义是 ALTER TABLE "data" ADD COLUMN . 我不会认为这会有什么不同-(

    1 回复  |  直到 8 年前
        1
  •  1
  •   Per Huss    8 年前

    您可以使用如下声明:

    create table foo (pk int primary key, 
                      usecount int as usecount + 1);
    

    ... 最右边的 usecount 引用上一个值。插入行时,只需插入 0 值:

    insert into foo values (42, 0);
    

    ... 将自动将值增加到 1 .

    如果您已经拥有该表,可以分两步添加该列:

    alter table foo add column usecount int default 0;
    alter table foo alter column usecount int as usecount + 1;