【问题标题】:Unique constraint error while insert record插入记录时出现唯一约束错误
【发布时间】:2016-11-15 16:38:01
【问题描述】:

将记录插入到 MY_TABLE 时出现错误

ORA-00001:违反了唯一约束 (TEST.MY_TABLE_PK)

这可能是由于重复的TRANS_ID。但我没有任何想法来解决这个问题。如何避免ORA-00001 错误并将记录插入MY_TABLE

  CREATE UNIQUE INDEX "MY_TABLE_PK" ON "MY_TABLE_TRANS" ("TRANS_ID") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TEST" ;

【问题讨论】:

  • 您要解决什么问题?插入记录然后删除重复键或提交后此键变为重复?
  • 我需要在 MY_TABLE 中插入记录,在这种情况下,我得到错误为 ORA-00001:违反了唯一约束 (TEST.MY_TABLE_PK),我猜到是由于 MY_TABLE_PK 而导致的错误
  • 您可以通过两次不为TRANS_ID 插入相同的值来避免这种情况
  • @a_horse_with_no_name 是的,请告诉我如何调试/编辑我的 MY_TABLE_PK
  • 您不需要“编辑”您的表格。您需要更改您的 INSERT 语句,以便它们不会两次插入相同的值。

标签: sql oracle


【解决方案1】:

如果您不关心重复,请删除索引

ALTER TABLE MY_TABLE_TRANS DROP INDEX MY_TABLE_PK;

或仅选择具有 \ distinct 分组的唯一记录:

SELECT t.trans_id , MAX(Other Column) , MAX(...
FROM MY_TABLE_TRANS t
GROUP BY t.trans_id

【讨论】:

  • 感谢您的反馈,是否可以在不删除的情况下编辑我的 MY_TABLE_PK 语句
  • 编辑成什么?
【解决方案2】:

由于您的 TRANS_ID 已经存在于您的 MY_TABLE_TRANS 表中,您还可以更新当前记录(如果您当然有权这样做)

首先验证什么是记录。

SELECT *
FROM MY_TABLE_TRANS
WHERE trans_id = 'your trans_id here'

看看记录。如果要修改它,可以使用 UPDATE 而不是新的 INSERT

UPDATE MY_TABLE_TRANS
SET (put your field that need to be updated) = 'your value'
WHERE trans_id = 'your trans_id here'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2016-04-17
    相关资源
    最近更新 更多