mysql - MySQL 错误 1215:无法添加外键约束
问题描述
我正在尝试将新架构转发到我的数据库服务器,但我不知道为什么会发生此错误。我试图找到答案,但我发现的一切要么是 Innodb 中的数据库引擎,要么是我试图用作外键的表中的一个键。如果我没有做错,我两个都做错了。你能帮我做点别的吗?
在服务中执行 SQL 脚本
ERROR: Error 1215:
-- -----------------------------------------------------
-- Table 'Alternative_Pathways'.'Clients_has_Staff'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'Alternative_Pathways'.'Clients_has_Staff'
(
'Clients_Case_Number' INT NOT NULL,
'Staff_Emp_ID' INT NOT NULL,
PRIMARY KEY ('Clients_Case_Number', 'Staff_Emp_ID'),
INDEX 'fk_Clients_has_Staff_Staff1_idx'('Staff_Emp_ID' ASC),
INDEX 'fk_Clients_has_Staff_Clients_idx' ('Clients_Case_Number'),
CONSTRAINT 'fk_Clients_has_Staff_Clients'
FORIGN KEY ('Client_Case_Number')
REFERENCE 'Alternative_Pathways'.'Clients' ('Case_Number')
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT 'fk_Clients_has_Staff_Staff1'
FORREIGN KEY ('Staff_Emp_ID')
REFERENCES 'Alternative_Pathways'.'Staff' ('Emp_ID')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
SQL Script Execution Complete: Statement: 7 Successful, 1 Failed
以下是父表的 SQL:
CREATE TABLE IF NOT EXISTS 'Alternative_Pathways'.'Clients' (
'Case_Number' INT NOT NULL,
'First_Name' CHAR (10) NULL,
'Middle_Name' CHAR (10) NULL,
'Last_Name' CHAR (10) NULL,
'Address' CHAR (50) NULL,
'Phone_Number' INT (10) NULL,
PRIMARY KEY ('Case_Number') )
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS 'Alternative_Pathways.'(
'Emp_ID' INT NOT NULL,
'First_Name' CHAR (10) NULL,
'Middle_Name' CHAR (10) NULL,
'Last_Name' CHAR (10) NULL,
PRIMARY KEY ('Emp_ID') )
ENGINE = InnoDB
解决方案
尝试这个:
从使用您的架构开始
use Alternative_Pathways;
父表客户
删除单引号。您可以使用反引号而不是单引号。
CREATE TABLE IF NOT EXISTS Clients (
Case_Number INT NOT NULL,
First_Name CHAR (10) NULL,
Middle_Name CHAR (10) NULL,
Last_Name CHAR (10) NULL,
Address CHAR (50) NULL,
Phone_Number INT (10) NULL,
PRIMARY KEY (Case_Number)
)
ENGINE = InnoDB;
父表人员
CREATE TABLE IF NOT EXISTS Staff (
Emp_ID INT NOT NULL,
First_Name CHAR (10) NULL,
Middle_Name CHAR (10) NULL,
Last_Name CHAR (10) NULL,
PRIMARY KEY (Emp_ID)
)
ENGINE = InnoDB;
带约束的表
请注意,我已经更正了拼写错误。
CREATE TABLE IF NOT EXISTS Clients_has_Staff
(
Clients_Case_Number INT NOT NULL,
Staff_Emp_ID INT NOT NULL,
PRIMARY KEY (Clients_Case_Number, Staff_Emp_ID),
INDEX fk_Clients_has_Staff_Staff1_idx(Staff_Emp_ID ASC),
INDEX fk_Clients_has_Staff_Clients_idx (Clients_Case_Number),
CONSTRAINT fk_Clients_has_Staff_Clients FOREIGN KEY (Clients_Case_Number) REFERENCES Clients (Case_Number)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Clients_has_Staff_Staff1 FOREIGN KEY (Staff_Emp_ID) REFERENCES Staff (Emp_ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
ENGINE = InnoDB;
这适用于 MySQL 5.7.17。
推荐阅读
- javascript - cascade dropdown in mvc value change
- udp - Android 10 udp 广播收不到
- python - 如果它与python中的条件匹配,则查找并比较组中的最后一行和前一行
- c++ - 如何在 C++ 中获取和添加两个数字(大于 int 等)
- android - 在 Firebase 中接收日期时,在数据库中获取了如此多的垃圾文件
- reactjs - 材料表 - 嵌套列
- c++ - C++:错误:无法在 stl_list.h 创建变量对象
- python - 返回具有值的给定顶点集的边值
- django - 使用 django 应用程序在 AWS 上的私有静态文件
- android - 为什么以及何时一个 android 应用程序有多个任务?