当前位置: 首页 > 知识库问答 >
问题:

向oracle中的现有表添加自动递增主键[重复]

强宾白
2023-03-14

我想向包含数据的现有表中添加一个新的自动递增主列。我该怎么做?

我首先添加了一列,然后尝试添加一个序列,之后我就不知道如何插入该列并将其作为主键。

共有3个答案

邓欣德
2023-03-14

从Oracle OTN论坛抓取

使用更改表添加列,例如:

alter table tableName add(columnName NUMBER);

然后创建序列:

CREATE SEQUENCE SEQ_ID
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE;

并且,使用update在如下列中插入值

UPDATE tableName SET columnName = seq_test_id.NEXTVAL
阚夕
2023-03-14

如果有列和序列,则首先需要为所有现有行填充一个新键。假设您不关心将哪个键分配给哪一行

UPDATE table_name
   SET new_pk_column = sequence_name.nextval;

完成后,您可以创建主键约束(这假设没有现有主键约束,或者您已经删除了现有主键约束)

ALTER TABLE table_name
  ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column )

如果要自动生成密钥,需要添加触发器

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  :new.new_pk_column := sequence_name.nextval;
END;

如果您使用的是旧版本的Oracle,那么语法就有点麻烦了

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  SELECT sequence_name.nextval
    INTO :new.new_pk_column
    FROM dual;
END;
蓝夕
2023-03-14

假设表名为t1,主键名为id,首先创建序列:

create sequence t1_seq start with 1 increment by 1 nomaxvalue; 

然后创建一个触发器,该触发器在插入时递增:

create trigger t1_trigger
before insert on t1
for each row
   begin
     select t1_seq.nextval into :new.id from dual;
   end;
 类似资料:
  • 问题内容: 我想向具有数据的现有表中添加一个新的自动增量主列。我怎么做? 我先添加了一个列,然后尝试添加一个序列,此后,我迷失了如何插入该列并将其作为主键。 问题答案: 假设您的表被调用t1,您的主键被称为idFirst,创建序列: 然后创建一个触发器,该触发器在插入时增加:

  • 我正在尝试使用现有主键将自动递增id添加到现有表中 这是我的密码 表代码的初始迁移 将自动增量ID添加到现有表代码 我试图做的是向这个现有表添加一个自动递增的id,但它给了我这个错误 有人能帮帮我吗?我不想删除表的主键,我只想添加另一个自动递增的id,它不是主键,但可以是唯一键

  • 问题内容: 我有一个带有自动递增主键的MySQL表。我删除了表中间的一些行。例如,现在在ID列中有类似的内容:12、13、14、19、20。我删除了15、16、17和18行。 我想重新分配/重置/重新排序主键,以便保持连续性,即将19设为15,将20设为16,依此类推。 我该怎么做? 问题答案: 您可以删除主键列并重新创建它。然后应按顺序重新分配所有ID。 但是,在大多数情况下,这可能不是一个好主

  • 我将向一个SQL Server表中添加一行,该表的主键列是自动递增的(< code>identity)。当我以编程方式向表中插入一个新行时,有没有办法获得所添加行的键值,因为我想在另一个相关表中将它用作外键?

  • 问题内容: 我正在尝试更改没有主键或auto_increment列的表。我知道如何添加主键列,但我想知道是否有可能自动将数据插入主键列(我已经在数据库中有500行,并希望为其提供ID,但我不想手动执行) 。有什么想法吗?非常感谢。 问题答案: 在我的测试中,添加列的语句可以正常工作: 在为测试目的而创建的临时表上,以上语句创建了该 列,并为该表中的每个现有行插入了自动递增值,从1开始。

  • 问题内容: 我正在尝试添加具有自动增量的主键。 我已经阅读了一些文档和其他问题-有和声明,但是不起作用。 这是我做的: 和 我怎么了 我只想将主键增加1。 问题答案: 是或多或少是一种列类型,所以说就像说,只是说: 如果您想自己创建序列,那么您想将序列中下一个值的默认值设为默认值,这意味着: 为了模拟通常的行为,您还需要使表拥有该序列: 阅读手册的“串行类型”部分可能会很有成果。 我还建议您不要对