SQL 错误 - 此列列表没有匹配或唯一的主键

SQL error- No matching or unique primary key for this column list

您好,我是新手 SQL 也是该网站的新手!我一直在尝试将这些表与 Job 属性上的外键一起修复,我将 运行 保存到此错误中 "SQL error- No matching or unique primary key for this column-list."

根据我的理解并通过反复试验能够弄清楚问题是我的外键约束,但我似乎无法弄清楚如何解决它。

如有任何帮助,我们将不胜感激。

Create Table Names
(
FirstName VARCHAR2(25),
LastName VARCHAR2(25),
Address VARCHAR2(25),
Job VARCHAR2(25),

Constraint Name_PK
Primary Key (FirstName, LastName)
);

Create Table Jobs
(
Job VARCHAR2(25),
Salary VARCHAR2(5),
Assistant VARCHAR2(5),

Constraint Jobs_PK
Primary Key (Job),

Constraint Jobs_FK
Foreign Key (Job)
References Names(Job)
);

你可以试试这个

CREATE TABLE `NAMES` (
  `FirstName` varchar(25) DEFAULT NULL,
  `LastName` varchar(25) DEFAULT NULL,
  `Address` varchar(25) DEFAULT NULL,
  `Job` varchar(25) DEFAULT NULL,
  KEY `Job` (`Job`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `Jobs` (
  `Job` varchar(25) DEFAULT NULL,
  `Salary` varchar(5) DEFAULT NULL,
  `Assistant` varchar(5) DEFAULT NULL,
  KEY `Job` (`Job`),
  CONSTRAINT `Jobs_ibfk_1` FOREIGN KEY (`Job`) REFERENCES `NAMES` (`Job`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

您的设计需要改进的地方很少。

A FOREIGN KEY in one table points to a PRIMARY KEY in another table.

http://www.w3schools.com/sql/sql_foreignkey.asp

Job显然不是tableNames中的主键。这就是错误 "SQL 错误的原因 - 此列列表没有匹配或唯一的主键。"

您似乎打算从 Names table 引用 Jobs。这意味着 Names table 中有外键约束引用 JobsJob 列。您可以有多个名称共享同一个作业。

您需要稍微更改外键并将其移动到您定义的 Names table:

Create Table Jobs
(
Job VARCHAR2(25),
Salary VARCHAR2(5),
Assistant VARCHAR2(5),

Constraint Jobs_PK
Primary Key (Job)
);

Create Table Names
(
FirstName VARCHAR2(25),
LastName VARCHAR2(25),
Address VARCHAR2(25),
Job VARCHAR2(25),

Constraint Name_PK
Primary Key (FirstName, LastName),

        Constraint Jobs_FK
        Foreign Key (Job)
        References Jobs(Job)
);

如果您真的-真的需要从 Jobs 引用 Names,您需要做的就是在现有代码中列出 FirstNameLastName,如下所示:

参考姓名(名字, 姓氏)


附带说明一下,拥有两列主键通常不是一个好主意,但如果您有这样的主键,则必须将其作为两列主键引用。

您的外键顺序错误。你想要:

Create Table Names (
    FirstName VARCHAR2(25),
    LastName VARCHAR2(25),
    Address VARCHAR2(25),
    Job VARCHAR2(25),
    Constraint pk_Names Primary Key (FirstName, LastName)
    Constraint fk_Names_Job Foreign Key (Job) References Jobs(Job)
);

然后Names需要定义after Jobs.

只有当列是另一个 table 的主键或主键的一部分时,您才能将任何列设为外键。参考文献click