试图学习Mysql并遇到外键约束是错误的
由于某种原因,由于外键错误,我的代码不允许我创建projects表。我尝试了一些不同的方法,但似乎无法使其发挥作用,我尝试在这里寻找解决方案,但似乎无法做到这一点。任何帮助都将不胜感激试图学习Mysql并遇到外键约束是错误的,mysql,sql,database-design,foreign-keys,create-table,Mysql,Sql,Database Design,Foreign Keys,Create Table,由于某种原因,由于外键错误,我的代码不允许我创建projects表。我尝试了一些不同的方法,但似乎无法使其发挥作用,我尝试在这里寻找解决方案,但似乎无法做到这一点。任何帮助都将不胜感激 CREATE TABLE PEOPLE ( NAME VARCHAR(32) NOT NULL, GENDER ENUM('Male', 'Female', 'Other'), DOB DATE NOT NULL, SALARY VARCHAR(16) NOT NULL,
CREATE TABLE PEOPLE (
NAME VARCHAR(32) NOT NULL,
GENDER ENUM('Male', 'Female', 'Other'),
DOB DATE NOT NULL,
SALARY VARCHAR(16) NOT NULL,
PROJECT VARCHAR(32) NOT NULL,
BUSINESS_NAME VARCHAR(32) NOT NULL,
PRIMARY KEY(NAME, PROJECT)
);
CREATE TABLE PEOPLE_EMAILS (
NAME_ID VARCHAR(32) NOT NULL,
EMAIL VARCHAR(64) NOT NULL,
PRIMARY KEY(EMAIL),
FOREIGN KEY(NAME_ID) REFERENCES PEOPLE(NAME)
);
CREATE TABLE PEOPLE_PHONE (
NAME_ID2 VARCHAR(32) NOT NULL,
PHONE_NUMBER VARCHAR(32) NOT NULL,
PRIMARY KEY (PHONE_NUMBER),
FOREIGN KEY(NAME_ID2) REFERENCES PEOPLE(NAME)
);
CREATE TABLE PROJECTS (
PROJECT_NAME VARCHAR(32) NOT NULL,
PROJECT_LOCATION VARCHAR(32) NOT NULL,
BUDGET VARCHAR(16) NOT NULL,
FOREIGN KEY(PROJECT_NAME) REFERENCES PEOPLE(PROJECT)
);
想必,您希望外键与此相反。您可能希望人们引用项目,而不是项目引用人 这意味着您需要先创建projects表,然后创建people表。此外,您需要在项目上有一个适当的主键,以便在人员中引用它(我假设
project\u name
)
外键(项目名称)引用人员(项目)
-必须在人员
表中有一个索引,该索引的表达式等于或从项目
字段开始。现在没有这样的索引。在您的例子中,最简单的解决方案是createindex idx_project ON people(project)代码>。
CREATE TABLE PROJECTS (
PROJECT_NAME VARCHAR(32) NOT NULL,
PROJECT_LOCATION VARCHAR(32) NOT NULL,
BUDGET VARCHAR(16) NOT NULL,
PRIMARY KEY (PROJECT_NAME)
);
CREATE TABLE PEOPLE (
NAME VARCHAR(32) NOT NULL,
GENDER ENUM('Male', 'Female', 'Other'),
DOB DATE NOT NULL,
SALARY VARCHAR(16) NOT NULL,
PROJECT VARCHAR(32) NOT NULL,
BUSINESS_NAME VARCHAR(32) NOT NULL,
PRIMARY KEY(NAME, PROJECT),
FOREIGN KEY(PROJECT) REFERENCES PROJECTS(PROJECT_NAME)
);
CREATE TABLE PEOPLE_EMAILS (
NAME_ID VARCHAR(32) NOT NULL,
EMAIL VARCHAR(64) NOT NULL,
PRIMARY KEY(EMAIL),
FOREIGN KEY(NAME_ID) REFERENCES PEOPLE(NAME)
);
CREATE TABLE PEOPLE_PHONE (
NAME_ID2 VARCHAR(32) NOT NULL,
PHONE_NUMBER VARCHAR(32) NOT NULL,
PRIMARY KEY (PHONE_NUMBER),
FOREIGN KEY(NAME_ID2) REFERENCES PEOPLE(NAME)
);