0

私は mysql にあまり詳しくありません。データベースを更新しようとすると、次のエラーが表示されます。

子行を追加または更新できません: 外部キー制約が失敗しました ( lhollowa. Concert, CONSTRAINT Concert_ibfk_1FOREIGN KEY ( BandID) REFERENCES Bands( BandID))

私は自分が間違っていることについてかなり無知です。誰かが私を正しい方向に向けることができますか?

これが私が持っているものの一部です(残りはスペースを取りすぎます)。

 DROP TABLE IF EXISTS `Bands`;
 /*!40101 SET @saved_cs_client     = @@character_set_client */;
 /*!40101 SET character_set_client = utf8 */;
 CREATE TABLE `Bands` (
   `BandID` int(11) NOT NULL AUTO_INCREMENT,
   `BandName` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
   PRIMARY KEY (`BandID`)
 );

 DROP TABLE IF EXISTS `Songs`;

 CREATE TABLE `Songs` (
   `SongID` int(11) NOT NULL AUTO_INCREMENT,
   `SongTitle` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
   PRIMARY KEY (`SongID`)
 ) ENGINE=InnoDB AUTO_INCREMENT=481 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


 CREATE TABLE `Concert` (
 `ConcertID` int (40) NOT NULL AUTO_INCREMENT,
 `BandID` INT (40) NOT NULL DEFAULT '0',
 `Concert_Time` varchar (20) COLLATE utf8_unicode_ci DEFAULT NULL,
 `Venue_Name` varchar (40) COLLATE utf8_unicode_ci DEFAULT NULL,
 `Number_Seats` int (10) NOT NULL DEFAULT '0',
 `Number_Tickets` int (10) NOT NULL DEFAULT '0',
 PRIMARY KEY (ConcertID),
 FOREIGN KEY (BandID) REFERENCES Bands(BandID)
 );

 INSERT INTO `Concert` VALUES (82838283,1111111, 'noon', 'the razz', 139, 138);
4

3 に答える 3

3

エラーは、テーブルにレコードが存在するConcert前にテーブルにレコードを挿入しようとしていることを示しています。 BandIdBands

外部キーは、2 つのテーブル間の制約です。外部キーは、別のテーブルの列を参照する、あるテーブルの列を識別します。

Concertテーブルとテーブルの間に外部キーが設定されているためBands、レコードが存在する必要があります。そうしBandsないと、エラー メッセージが表示されます。そのため、コンサート レコードを作成する前に、id1111111を持つバンドを挿入する必要があります。Bands

動作中のバージョンを示すSQL Fiddle with Demoを参照してください。

于 2012-12-14T19:18:50.807 に答える
1

テーブルにないを使用してconcertテーブルを挿入または更新しようとしているか、既存のコンサートが関連付けられているバンドを削除しようとしています。bandidbands

これは通常、操作を間違った順序で実行しているためです。すべての時点でデータが一貫していることを確認する必要があります。

「正しい順序で更新を行う」のに代わる別の方法があります。そのような制約を一時的にオフにし、任意の順序で変更を加えてから、制約を再度オンにすることができます。

SET foreign_key_checks = 0;
-- update, insert whatever
SET foreign_key_checks = 1;

これは、データの一貫性を保つことを避けるという意味ではありませんが、dara に変更を加える順序について心配する必要がないという意味です。

于 2012-12-14T19:19:51.523 に答える
0

Concert テーブルに挿入する前に、Bands テーブルにバンドを挿入します。

于 2012-12-14T19:18:27.870 に答える