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.
列Job
显然不是tableNames
中的主键。这就是错误 "SQL 错误的原因 - 此列列表没有匹配或唯一的主键。"
您似乎打算从 Names
table 引用 Jobs
。这意味着 Names
table 中有外键约束引用 Jobs
和 Job
列。您可以有多个名称共享同一个作业。
您需要稍微更改外键并将其移动到您定义的 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
,您需要做的就是在现有代码中列出 FirstName
和 LastName
,如下所示:
参考姓名(名字, 姓氏)
附带说明一下,拥有两列主键通常不是一个好主意,但如果您有这样的主键,则必须将其作为两列主键引用。
您的外键顺序错误。你想要:
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
您好,我是新手 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.
列Job
显然不是tableNames
中的主键。这就是错误 "SQL 错误的原因 - 此列列表没有匹配或唯一的主键。"
您似乎打算从 Names
table 引用 Jobs
。这意味着 Names
table 中有外键约束引用 Jobs
和 Job
列。您可以有多个名称共享同一个作业。
您需要稍微更改外键并将其移动到您定义的 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
,您需要做的就是在现有代码中列出 FirstName
和 LastName
,如下所示:
参考姓名(名字, 姓氏)
附带说明一下,拥有两列主键通常不是一个好主意,但如果您有这样的主键,则必须将其作为两列主键引用。
您的外键顺序错误。你想要:
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