質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

4518閲覧

sql error 1452について

kongou

総合スコア7

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/04/30 04:50

編集2018/04/30 04:52

前提・実現したいこと

簡単なデータベースを作成しようと試みています。

テーブルにデータを挿入しようとするとエラーが発生します。
少し長くなりますが、問題点の指摘、訂正の方法をご教授願います。

発生している問題・エラーメッセージ

ERROR 1452(23000): Cannot add or update a child row: a foreign key constraint fails('db_b','parts',(CONSTRAINT 'parts_ibfk_1' FOREIGN KEY('maker_parts_id') REFERENCES 'maker'('id'))

countory, makerのデータは挿入できました。
partsのデータ挿入の際、上記のエラー文が表示されます。

また、countryをcountoryと間違えていますが、気にしないでいただけるとありがたいです。

SQL

1 2CREATE TABLE countory( 3 id INT AUTO_INCREMENT, 4 name VARCHAR(4) UNIQUE, 5 PRIMARY KEY(id) 6); 7 8CREATE TABLE maker( 9 id INT AUTO_INCREMENT, 10 name VARCHAR(20) UNIQUE, 11 year char(4), 12 countory_id INT, 13 updated_date TIMESTAMP, 14 PRIMARY KEY(id), 15 FOREIGN KEY (countory_id) REFERENCES countory (id) 16); 17 18CREATE TABLE parts( 19 id INT AUTO_INCREMENT, 20 name VARCHAR(20) UNIQUE, 21 maker_parts_id INT, 22 genre VARCHAR(20), 23 PRIMARY KEY(id), 24 FOREIGN KEY (maker_parts_id) REFERENCES maker(id) 25); 26 27CREATE TABLE maker_parts( 28 id INT AUTO_INCREMENT, 29 year CHAR(4), 30 maker_id INT, 31 parts_id INT, 32 updated_date TIMESTAMP, 33 PRIMARY KEY(id, maker_id, parts_id), 34 FOREIGN KEY(maker_id) REFERENCES maker(id), 35 FOREIGN KEY(parts_id) REFERENCES parts(id) 36); 37

SQL

1 2INSERT INTO maker(id,name,year,countory_id) VALUES 3 (1, 'SEYMOUR DUNCAN',1978,13), 4 (2, 'GOTOH', 1960,14), 5 (3, 'FENDER', 1946,13), 6 (4, 'GIBSON', 1902,13), 7 (5, 'MONTREUX', 2011,14), 8 (6, 'SCHALLER', 1945,15), 9 (7, 'DIMARZIO', 1975,13), 10 (8, 'EMG', 1976,13), 11 (9, 'BARTOLINI', 1973,13), 12 (10, 'GRAPHTECH', 1949,14), 13 (11, 'FLOYD ROSE', 1977,13), 14 (12, 'ALLPARTS', 1982,13); 15 16INSERT INTO countory(id,name) VALUES 17 (13, 'アメリカ'), 18 (14, '日本'), 19 (15, 'ドイツ'); 20 21INSERT INTO parts(id, name, maker_parts_id, genre) VALUES 22 (16, 'SH-4', 68873, 'pu'), 23 (17, 'SG381-07-L6', 166492, 'peg'), 24 (18, 'Fat Finger Guitar', 165036, 'etc'), 25 (19, 'p-90', 12345, 'pu'), 26 (20, '2009 HIST LP', 154170, 'puguard'), 27 (21, 'SECURITY LOCK Ni', 67627, 'straplock'), 28 (22, 'DP100 F-SPACE', 28238, 'pu'), 29 (23, 'Zakk Wylde Set', 32010, 'pu'), 30 (24, 'XTCT', 18767, 'pu'), 31 (25, 'PS-8000-00', 89710, 'bridge'), 32 (26, 'Tremolo R2 32', 7322, 'bridge'), 33 (27, 'BB-3350-001', 230899, 'bridge'); 34→ERROR 1452(23000): Cannot add or update a child row: a foreign key constraint fails('db-','parts',(CONSTRAINT 'parts_ibfk_1' FOREIGN KEY('maker_parts_id') REFERENCES 'maker'('id')) 35 36INSERT INTO maker_parts(id, year, maker_id, parts_id) VALUES 37 (28, 2007, 1, 68873), 38 (29, 2016, 2, 166492), 39 (30, 2011, 3, 165036), 40 (31, 2013, 4, 12345), 41 (32, 2015, 5, 154170), 42 (33, 2018, 6, 67627), 43 (34, 2017, 7, 28238), 44 (35, 2017, 8, 32010), 45 (36, 2017, 9, 18767), 46 (37, 2013, 10, 89710), 47 (38, 2014, 11, 7322), 48 (39, 2017, 12, 230899);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

エラーメッセージは調べてないのでしょうか?
ぱっとみpartsテーブルのmaker_parts_id列にはmakerのidを入れないとだめって感じに読めますが

投稿2018/04/30 06:45

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

countryなどのスペルミスは修正するにそんなに大きな負荷ではないでしょう。さっさと修正しましょう。
FOREIGN KEYを使っている場合は親テーブルのキーが先に存在していなければなりません。
countryテーブルが存在して初めてmakerテーブルをINSERTできます。
CREATE TABLE文やINSERT文もそれを踏まえて並べては?

ER図を作っておくのもおすすめです。A5:SQL Mk-2 ならフリーソフトです。

投稿2018/05/01 12:01

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

partsmaker_parts_idに対して外部キー制約が掛かっていますから、insertの順番としてはmakerの方が先です。
(※テーブル名の見間違いでした。)

その上で、サンプルではpartsmaker_parts_idは、同じくサンプルのmakeridの値とは合っていないからでしょう。

投稿2018/05/01 01:21

編集2018/05/01 01:25
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問