2

このコードを MySQL データベースの Albums テーブルに挿入しようとしています

INSERT INTO `Albums` (`Albumid`, `Name`, `Numberoftracks`, `Artistid`,     ]
`Genre`) VALUES (1, "Innuendo", 12, "Queen", "Rock");

しかし、しようとするたびに、このエラーが発生し続けます。

1452 - Cannot add or update a child row: a foreign key constraint fails 
(`b4014107_db1/Albums`, CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`) 
REFERENCES `Artist` (`Artistid`))

テーブル内の外部キーと関係があることはわかっていますが、外部キーは自動インクリメントされないため、手動で入力する必要があります。

これがテーブルコードです。

CREATE TABLE `Albums` (  `Albumid` int(6) NOT NULL,  `Name` varchar(50) NOT 
NULL,  `Numberoftracks` int(11) NOT NULL,  `Artistid` int(6) NOT NULL,  
`Genre` varchar(50) NOT NULL,  PRIMARY KEY  (`Albumid`),  KEY `Artistid` 
(`Artistid`),  CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`)   
REFERENCES `Artist` (`Artistid`)) ENGINE=InnoDB DEFAULT CHARSET=latin1

これを修正するにはどうすればよいですか? テーブルにデータを入力する必要があります。

4

2 に答える 2

3

artistidテーブル内の外部キーAlbumsです。親テーブルに存在しない子テーブルに外部キーを挿入しようとすると、親子関係エラーが発生します。artistidあなたのArtistテーブルには存在しません。

また、追加するデータ型artistidも異なります。

mysql ドキュメントから取得

外部キー関係には、中央のデータ値を保持する親テーブルと、その親を指す同一の値を持つ子テーブルが含まれます。子表にFOREIGN KEY句を指定しています。

親テーブルに一致する候補キー値がない場合、子テーブルに外部キー値を作成しようとする INSERT または UPDATE 操作は拒否されます。

エラーを取り除くには、最初にQueensアーティストをArtistテーブルに挿入してから、それをAlbumsテーブルに挿入できます。column のデータ型も修正してartistidください。

于 2016-03-21T15:38:06.163 に答える
0

外部キーを使用しても、暗黙的な自動インクリメントが行われるわけではありません。テーブル内の外部キーは、レコードが別のレコードに既に存在している必要があることを意味します。http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.htmlを参照してください(必要に応じて URL のバージョンを変更してください)

それ以外の場合は、アーティストを動的に作成する場合はトリガーを作成します。

それが明確になることを願っています。

于 2016-03-21T15:37:56.213 に答える