发生MySQL错误代码1452,但确实存在值和表

时间:2017-01-12 18:02:21

标签: mysql sql foreign-keys

我不能为我的生活弄清楚我在哪里陷入困境。我有以下表格,使用此SQL代码制作:

CREATE TABLE IF NOT EXISTS Users(
    username VARCHAR(50) NOT NULL PRIMARY KEY,
    pwd TEXT NOT NULL,
    first_name VARCHAR(25) NOT NULL,
    last_name VARCHAR(25) NOT NULL,
    user_type VARCHAR(25) NOT NULL,
    user_status VARCHAR(10) NOT NULL,
    email VARCHAR(255) NOT NULL
);

CREATE UNIQUE INDEX Users_Index
ON Users (username);

CREATE TABLE IF NOT EXISTS Clients(
    client_id VARCHAR(10) PRIMARY KEY,
    client_name VARCHAR(255) NOT NULL UNIQUE,
    first_name VARCHAR(25) NOT NULL,
    last_name VARCHAR(25) NOT NULL,
    middle_name VARCHAR(25),
    related_to VARCHAR(10),
    relation_type VARCHAR(25),
    ssn_ein VARCHAR(11) NOT NULL UNIQUE,
    date_of_birth DATE NOT NULL,
    manager VARCHAR(50) NOT NULL,
    entity_type VARCHAR(50) NOT NULL,
    client_status VARCHAR(15) NOT NULL,
    address VARCHAR(255) NOT NULL,
    city VARCHAR(255) NOT NULL,
    state VARCHAR(2) NOT NULL,
    zip INT NOT NULL,
    email VARCHAR(255),
    phone VARCHAR(255) NOT NULL,
    notes TEXT,
    FOREIGN KEY(manager) REFERENCES Users(username)
);

CREATE UNIQUE INDEX username_index
ON Clients(manager);

我尝试将数据插入Clients表,但它给了我错误1452,这是在约束检查失败时。事实是,我已经在Users表中有数据,我TRIPLE检查拼写错误,我在两个表中添加了索引无济于事,我检查了引用是否指向右表,我检查发现引擎都是InnoDB以及整理是准确的,用户名和经理列都是完全相同的数据类型。我已经检查了MySQL文档并且尽我所知遵循了所有必需品。有谁知道可能是什么问题?

以下是示例数据:

INSERT INTO Clients VALUES (
    client_id = "123456",
    client_name = "John Doe",
    first_name = "John",
    last_name = "Doe",
    middle_name = "Michael",
    related_to = NULL,
    relation_type = NULL,
    ssn_ein = "123-456-7890",
    date_of_birth = "1990-01-01",
    manager = "OzzyTheGiant",
    entity_type = "Individual",
    client_status = "Active",
    address = "123 Main St.",
    city = "Anytown",
    state = "XX",
    zip = 78550,
    email = "john.doe@example.com",
    phone = "123-555-7890",
    notes = "self-employed"
);

1 个答案:

答案 0 :(得分:0)

这导致您尝试插入Clients表的行/记录在Users表中不存在,从而导致错误。由于父表本身不存在记录,您如何期望在子表中插入?那是不可能的。

此外,您的INSERT查询语法错误。您的架构创建脚本应如下所示。请在此处查看演示小提琴: Demo Here

CREATE TABLE IF NOT EXISTS Users(
    username VARCHAR(50) NOT NULL PRIMARY KEY,
    pwd TEXT NOT NULL,
    first_name VARCHAR(25) NOT NULL,
    last_name VARCHAR(25) NOT NULL,
    user_type VARCHAR(25) NOT NULL,
    user_status VARCHAR(10) NOT NULL,
    email VARCHAR(255) NOT NULL
);

CREATE UNIQUE INDEX Users_Index
ON Users (username);

CREATE TABLE IF NOT EXISTS Clients(
    client_id VARCHAR(10) PRIMARY KEY,
    client_name VARCHAR(255) NOT NULL UNIQUE,
    first_name VARCHAR(25) NOT NULL,
    last_name VARCHAR(25) NOT NULL,
    middle_name VARCHAR(25),
    related_to VARCHAR(10),
    relation_type VARCHAR(25),
    ssn_ein VARCHAR(11) NOT NULL UNIQUE,
    date_of_birth DATE NOT NULL,
    manager VARCHAR(50) NOT NULL,
    entity_type VARCHAR(50) NOT NULL,
    client_status VARCHAR(15) NOT NULL,
    address VARCHAR(255) NOT NULL,
    city VARCHAR(255) NOT NULL,
    state VARCHAR(2) NOT NULL,
    zip INT NOT NULL,
    email VARCHAR(255),
    phone VARCHAR(255) NOT NULL,
    notes TEXT,
    FOREIGN KEY(manager) REFERENCES Users(username)
);

CREATE UNIQUE INDEX username_index
ON Clients(manager);

INSERT INTO `Users` VALUES('OzzyTheGiant', 'scxcxx','test1','test2','test','test','test');

INSERT INTO Clients VALUES (
'123456',
'John Doe',
'John',
'Doe',
'Michael',
NULL,
NULL,
'123-456-78',
'1990-01-01',
'OzzyTheGiant',
'Individual',
'Active',
'123 Main St.',
'Anytown',
'XX',
78550,
'john.doe@example.com',
'123-555-7890',
'self-employed'
);