首页 > 解决方案 > 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

标签: mysqlsql

解决方案


尝试这个:

从使用您的架构开始

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。


推荐阅读