Firebird:如何从新添加的生成器为现有行分配id

zz1*_*433 2 sql firebird

我有一个表已经包含一些行,并没有主键.

我想现在添加一个主键,但为此我需要为现有行的主键字段设置唯一值.如何使用新添加的发电机完成?

And*_*jeŭ 5

主键本身不会生成任何值.这是约束.在您的示例中,您需要做下一步:

  1. 为PK值添加列,声明它为NOT NULL
  2. 使用唯一值填写列
  3. 创建PK约束

例:

CREATE TABLE test (a varchar(20));

COMMIT;

INSERT INTO test (a) VALUES ('A');
INSERT INTO test (a) VALUES ('B');
INSERT INTO test (a) VALUES ('C');

COMMIT;

ALTER TABLE test ADD pk INTEGER NOT NULL;

CREATE GENERATOR g_test;

COMMIT;

UPDATE test SET pk = GEN_ID(g_test, 1);

ALTER TABLE test ADD CONSTRAINT test_pk
  PRIMARY KEY (pk);
Run Code Online (Sandbox Code Playgroud)