列的默认值(当值设置为NULL时)等于其他列

时间:2013-04-03 09:15:44

标签: sql database postgresql hsqldb

我的SQL定义的一部分(对于):

CREATE TABLE activities (
  id  BIGINT GENERATED BY DEFAULT AS IDENTITY,
  group_id  BIGINT NOT NULL
  CONSTRAINT pk_activities PRIMARY KEY (id)
);

insert期间的情景是:

  • id是自动生成/自动递增的,
  • 当指定(非空)设置为给定值时,
  • group_id
  • group_id未指定时设置为刚生成的id

我定位(用于测试)。

可以这样做吗?

2 个答案:

答案 0 :(得分:1)

您无法将默认值设置为其他列的默认值。

但是,您可以创建一个TRIGGER来完成此任务。

这是PostgreSQL的一个例子。如果column anothercolumnNULL之前为INSERT,它会自动将UPDATE替换为CREATE OR REPLACE FUNCTION mytable_fn() RETURNS trigger AS $body$ BEGIN IF NEW.column ISNULL THEN NEW.column := NEW.anothercolumn; END IF; RETURN NEW; END; $body$ LANGUAGE 'plpgsql'; CREATE TRIGGER mytable_trigger BEFORE INSERT OR UPDATE ON mytable FOR EACH ROW EXECUTE PROCEDURE mytable_fn();

{{1}}

答案 1 :(得分:1)

这可以使用触发器完成,或者如果你不想使用触发器,则在选择这样的行时处理NULL:

SELECT id, isnull(group_id, id) group_id FROM activities;