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

外键是两个表之间的约束。外键标识一个表中的列,该列引用另一个表中的列。

Concert由于您在和表之间设置了外键Bands,因此记录必须存在,Bands否则您将收到错误消息。1111111因此,您必须先插入带 id 的乐队,Bands然后才能为他们创建音乐会记录。

请参阅SQL Fiddle with Demo 以显示工作版本。

于 2012-12-14T19:18:50.807 回答
1

您正在尝试使用表中未找到的 插入或更新concertbandidbands或删除具有与其关联的现有音乐会的乐队。

这通常是因为您以错误的顺序执行操作;您必须确保在每个点上我们的数据都是一致的。

“以正确的顺序进行更新”还有另一种选择:您可以暂时关闭此类约束,以任何顺序进行更改,然后再次打开约束:

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 回答