首页 文章

在oracle [duplicate]中向现有表添加自动增量主键

提问于
浏览
65

这个问题在这里已有答案:

我想将一个新的自动增量主列添加到具有数据的现有表中 . 我怎么做?

我首先添加了一个列,然后尝试添加一个序列,之后我失去了如何插入并将该列作为主键 .

4 回答

  • 28

    假设您的表名为 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;
    
  • 49

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

    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;
    
  • 5

    来自Oracle OTN forums

    使用alter table添加列,例如:

    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
    
  • 15

    您可以使用 Oracle Data Modeler 创建自动递增代理键 .

    Step 1. - Create a Relational Diagram

    您可以先创建逻辑图和工程师来创建关系图,也可以直接创建关系图 .

    添加需要具有自动递增PK的实体(表),选择PK的类型作为整数 .

    Step 2. - Edit PK Column Property

    获取PK列的属性 . 您可以双击列的名称或单击“属性”按钮 .

    出现“列属性”对话框 .

    选择“常规”选项卡(第一次选择“默认选择”) . 然后选中“自动增量”和“标识列”复选框 .

    Step 3. - Additional Information

    可以通过选择“自动增量”选项卡来指定与自动增量相关的附加信息 .

    • 开始

    • 增量

    • 最小值

    • 最大值

    • 周期

    • 禁用缓存

    • 订单

    • 序列名称

    • 触发器名称

    • 生成触发器

    提及序列名称通常是个好主意,因此它在PL / SQL中很有用 .

    单击“确定(应用)”到“列属性”对话框 .

    单击“确定(应用)”到“表属性”对话框 .

    表出现在关系图中 .

相关问题