2017-01-12 14 views
0

私の人生にとって私はどこでうまくできませんでしたか?私は、このSQLコードを使用して作られた以下の表を、持っている:MySQLエラーコード1452が発生しますが、値とテーブルが存在します

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だけでなく照合順序も正確で、usernameカラムとmanagerカラムは同じ正確なデータ型です。私は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 = "[email protected]", 
    phone = "123-555-7890", 
    notes = "self-employed" 
); 

答えて

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, 
'[email protected]', 
'123-555-7890', 
'self-employed' 
); 
+0

(手のひらを顔に当てる)......あなたは、私がそのようなINSERT文を書いた理由を知りたいですか?私はPythonフラスコのアプリケーションでPeeweeを使用しているので、PythonとSQLの間で構文を切り替えるのを忘れてしまいます。私のおかしい。あなたは勝つ! .... btw。ユーザーテーブルのデータが存在していたため、存在しませんでした。 – OzzyTheGiant

+0

また、将来この問題を抱える人にとって、私の単純な間違いから学べることの1つは、MySQLが構文エラーかどうかを教えてくれないことです。何らかの理由でエラー1452を吐き出します。各列の値としてのコンマの間 – OzzyTheGiant

関連する問題