【问题标题】:SQL error: "name already used by an existing constraint"SQL 错误:“名称已被现有约束使用”
【发布时间】:2013-11-29 06:53:30
【问题描述】:

我正在尝试创建一些表并设置外键,但我一直遇到外键问题。

早些时候我创建了下表,它工作正常

CREATE TABLE inpatient
(PatientNo varchar(6) NOT NULL,
WardNo number(2),
BedNo number(3) NOT NULL,
OnWaitingList date, 
WardRequired varchar(25), 
ExpectStayInDays number(4), 
DatePlaced date, 
DateLeave date, 
ActualLeave date, 

constraint PatientFK foreign key (PatientNo)     references Patient (patientNo),

constraint bedFK foreign key (BedNo)     references Bed (bedNo));

注意在倒数第二行使用了 patientFK。

然后我继续创建另一个表

CREATE TABLE NOK
(PatientNo varchar(6)   NOT NULL,
NOKFullName   varchar(25), 
NOKRelationship   varchar(25), 
NOKTelephone   number(11), 
NOKStreetAddress   varchar(25), 
NOKSuburb   varchar(25), 
NOKState   char(2), 
NOKPostCode   number(4), 


constraint patientFK foreign key (PatientNo)
references Patient (patientNo));

我收到以下错误消息

错误报告: SQL 错误:ORA-02264:名称已被现有约束使用 02264. 00000 - “名称已被现有约束使用” *原因:指定的约束名称必须是唯一的。 *Action:为约束指定一个唯一的约束名称。

我不知道如何解决它或找到可以提出解决方案的类似示例。

【问题讨论】:

  • 尝试为表NOK的外键指定另一个名称

标签: sql foreign-keys constraints


【解决方案1】:

约束的名称(在这种情况下是 PatientFK)在数据库中是唯一的。您已经使用过一次,因此当您再次尝试使用它时会收到一条错误消息。只需为您在 NOK 表上设置的约束指定一个不同的名称:

也许:

constraint patientFK_nok foreign key (PatientNo)

【讨论】:

  • 如果我这样做,它会影响我如何填充表格或将来引用它吗?我注意到一个使用 postgresql 完成的类似示例,使用与我相同的语句,但显然没有任何问题。它与其他版本的 sql 的工作方式不同吗?
  • 唯一的区别应该是您在需要删除或修改约束时用来引用约束的名称。由于您不能使用与另一个约束相同的名称,您的选择只是更改名称或根本不使用约束。 SQL 的不同实现有不同的限制和便利。我不能代表 Postgres,但这种差异并不令人惊讶。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
相关资源
最近更新 更多