首页 > 解决方案 > 如何在 Firebird 表上创建默认约束以分配自动生成的 UUID 值

问题描述

我正在尝试定义一个列类型为 UUID ( CHAR(16) CHARACTER SET OCTETS) 的表。通读 Firebird 3.0 开发者指南后,我发现只支持上下文变量/简单表达式/常量。我想知道是否有一种方法可以在表上定义默认约束以调用GEN_UUID()以分配 UUID 以进行插入?

标签: sqlfirebirduuiddefault-constraint

解决方案


您不能使用DEFAULT子句来执行此操作,因为它只允许使用文字和 Firebird 文档中称为'context variables'的选定数量。

要执行您想要的操作,您需要创建一个插入前触发器来生成值。像这样的东西:

create trigger bi_yourtable before insert on yourtable
as
begin
  new.uuid_column = gen_uuid();
end

或者,如果您不想无条件生成 UUID:

create trigger bi_yourtable before insert on yourtable
as
begin
  if (new.uuid_column is null) then
  begin
    new.uuid_column = gen_uuid();
  end
end

推荐阅读