如何在不删除数据和添加主键的情况下解决ORA-01758问题

时间:2019-12-07 21:13:49

标签: sql oracle ddl

我想写ALTER TABLE SQL语句向表中添加一列。该列分类为NUMBER数据类型,NOT NULL属性和主键。 但是它显示的是ORA-01758。

ALTER TABLE INSURANCE
ADD (INS_ID NUMBER PRIMARY KEY NOT NULL);

如果我选择DEFAULT 0,它确实解决了问题,但是我无法设置主键,并且INS_ID显示0,而不是(空) 由于此表的数据来自excel文档,因此在不删除数据的情况下应该如何解决?

如果必须删除数据,如何轻松恢复?

1 个答案:

答案 0 :(得分:2)

通常,您可以:

  • 提供默认值,以便oracle可以在创建列时填充列,满足约束条件或
  • 将列创建为可为空,用相关数据填充它,然后启用not null限制/将其设为有数据后的主键,或者
  • 清空桌子

1不是您的选择,因为如果要将这些值用作主键,则它们必须是唯一的。您可以考虑将列与序列相关联,或者将其设为同一列

如果自动生成的递增数字不如PK(例如,关键数据已经已知或已计算),则

2是您可能选择的选项

3是您已经说过的不可选项


考虑到持续的维护需求-除非您使用提供唯一值的序列/身份或类似物,否则需要升级每个将数据写入该表的前端应用程序,以了解其具有主键。排。如果有很多要更新的内容,并且您不希望以特定的形式或从其他地方的现有值/关系获得PK,那么拥有自动编号PK可能会有所帮助。如果此数据需要与具有密钥的现有数据相关,则需要升级前端应用程序,以便它们可以尊重新的PK

相关问题