如何更改表中的现有主键?

时间:2015-12-06 07:05:24

标签: firebird

我有一个表,其中已经定义了主键。我想为它添加一列,它也必须是主键的一部分。怎么办?

4 个答案:

答案 0 :(得分:6)

如果PK_MY_TABLE是现有主键的约束名称:

ALTER TABLE MY_TABLE DROP CONSTRAINT PK_MY_TABLE;

COMMIT;

alter table MY_TABLE
add constraint PK_MY_TABLE
primary key (ID,ID_1);

ALTER TABLE MY_TABLE DROP CONSTRAINT PK_MY_TABLE, ADD CONSTRAINT PK_MY_TABLE PRIMARY KEY (ID,ID_1); 

答案 1 :(得分:2)

在单个查询中执行此操作的优雅方法

在MYSQL中

ALTER TABLE TABLE_NAME DROP PRIMARY KEY, ADD PRIMARY KEY(ID,ID_1);

FOR FIREBIRD: -

ALTER TABLE TABLE_NAME DROP CONSTRAINT TEST_CONST, ADD PRIMARY KEY (ID,ID_1)

答案 2 :(得分:1)

你无法做到这一步,使用firebird

你必须这样做,引用上面的例子

ALTER TABLE MY_TABLE DROP CONSTRAINT PK_MY_TABLE;

alter table add id_1;

COMMIT;

改变表MY_TABLE 添加约束PK_MY_TABLE 主键(ID,ID_1);

提交;

强烈建议您在单独使用数据库时完成此操作

答案 3 :(得分:0)

您可以使用执行块来实现:

EXECUTE BLOCK

AS

  DECLARE NOMBRE VARCHAR(100);

BEGIN

 FOR

  SELECT RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS WHERE RDB$RELATION_NAME = 'MY_TABLE' AND RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'

  INTO NOMBRE

  DO

  IF (NOMBRE IS NOT NULL) THEN

  BEGIN

    EXECUTE STATEMENT 'ALTER TABLE MY_TABLE DROP CONSTRAINT ' || NOMBRE;

  END

  SUSPEND;

END