我的SQL定义的一部分(对于hsqldb):
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
我定位postgresql和hsqldb(用于测试)。
可以这样做吗?
答案 0 :(得分:1)
您无法将默认值设置为其他列的默认值。
但是,您可以创建一个TRIGGER来完成此任务。
这是PostgreSQL的一个例子。如果column
anothercolumn
或NULL
之前为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;