0

これらの値を、MySQL データベースのテーブルの 1 つの Artist_Name 列に挿入しようとしています。

INSERT INTO tbl_Artist (Artist_Name)VALUES ('Taylor Swift');
INSERT INTO tbl_Artist (Artist_Name)VALUES ('Elton John');
INSERT INTO tbl_Artist (Artist_Name)VALUES ('Kanye West');
INSERT INTO tbl_Artist (Artist_Name) VALUES ('Fallout Boy');

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

#1452 - Cannot add or update a child row: a foreign key constraint fails
(`b4014107_db2/tbl_Artist`, CONSTRAINT `tbl_Artist_ibfk_1` FOREIGN KEY  
(`Artist_id`) REFERENCES `tbl_Artist` (`Artist_id`)

テーブル自体の Artist_id 列に割り当てた外部キーと関係があると思います。問題の内容と修正方法がわかりません。

お役に立てれば、テーブルのコード全体を提供できます。

CREATE TABLE `tbl_Artist` (  `Artist_id` int(11) NOT NULL auto_increment,    
`Artist_Name` varchar(32) NOT NULL,  PRIMARY KEY  (`Artist_id`),  CONSTRAINT 
`tbl_Artist_ibfk_1` FOREIGN KEY (`Artist_id`) REFERENCES `tbl_Artist` 
(`Artist_id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1

どんな助けでも大歓迎です。

4

2 に答える 2

2

これはあなたのテーブル定義です:

CREATE TABLE `tbl_Artist` (
    `Artist_id` int(11) NOT NULL auto_increment,    
    `Artist_Name` varchar(32) NOT NULL, 
    PRIMARY KEY  (`Artist_id`), 
    CONSTRAINT `tbl_Artist_ibfk_1` FOREIGN KEY (`Artist_id`) REFERENCES `tbl_Artist` (`Artist_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

これは実際にはちょっと面白いです。テーブル自体の主キーに戻る主キーの外部キー参照があります。結果として、行を参照する必要があるため、行を挿入することはできません。

いずれにせよ、主キーはそれ自体への外部キーであってはなりません。したがって、制約を削除するだけです。

CREATE TABLE `tbl_Artist` (
    `Artist_id` int(11) NOT NULL auto_increment,    
    `Artist_Name` varchar(32) NOT NULL, 
    PRIMARY KEY  (`Artist_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
于 2016-03-21T11:52:35.627 に答える
0

問題は、外部キーにより、テーブルに既に存在する ID を持つ行のみを挿入することです。したがって、解決策は、この制約を削除して、主キーのみを残すことです。外部キーは、テーブル間の整合性チェックを作成するために使用されます。たとえば、アーティスト テーブルへの外部キーを持つアルバム テーブル。

于 2016-03-21T11:53:32.967 に答える