【问题标题】:No matching unique or primary key for this column-list in OracleOracle 中此列列表没有匹配的唯一键或主键
【发布时间】:2015-11-14 08:48:34
【问题描述】:

我已经通过这个 SQL 语法在 Oracle 中创建了 PERSON 表:

 Create table person
 (
 p_id int not null,
 personName char(5) not null );

然后我尝试使用以下语法创建 ORDERS 表:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES person(p_id) );

但我收到以下错误。

No matching unique or primary key for this column-list.

有什么问题?我该如何解决这个问题?

【问题讨论】:

  • 你的意思是[oracle]还是[mysql]?尽管 Oracle Corporation 拥有 MySQL(因为它收购了 Sun),但我们为实际的 Oracle RDBMS 保留了 [oracle] 标签,这是一个不同的产品。
  • 经过适当考虑,发布的错误消息是 Oracle 错误消息 ORA-02270,因此我删除了 [mysql] 标签。如果您想要两个数据库的答案,请回复。

标签: sql oracle foreign-keys


【解决方案1】:

为个人表添加主键:

 CREATE TABLE person(
   p_id int not null,
   personName char(5) not null,
   PRIMARY KEY (p_ID)
 );

SqlFiddleDemo

【讨论】:

    【解决方案2】:

    外键强制执行一对多关系。也就是说,无论从属表中有多少记录,它们只能引用父表中的一条记录。这意味着父表中的引用列必须受 PRIMARY 或 UNIQUE 键的约束。

    错误消息告诉您person(p_id) 上没有这样的约束。瞧!如果我们比较您发布的两条 DDL 语句,我们可以看到您为 ORDERS 创建了主键,但没有为 PERSON 创建主键。

    解决方案很简单:通过向 PERSON 添加主键来约束 P_ID。您可以删除并重新创建表,也可以使用alter table 语句to add a primary key

    【讨论】:

      【解决方案3】:

      您应该将主键添加到人员表。 试试这个:

      ALTER TABLE 人 添加约束 p_id 主键 (p_id);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多