无法添加或更新子行.cant插入数据

时间:2015-04-11 17:14:41

标签: php mysql

无法在我的sql中生成一个孩子  我创建了这样的表格:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//create the genre table 
$genre = @mysql_query(    'CREATE TABLE IF NOT EXISTS genre (

                                                   genreName       CHAR(15),
                                                    rated       CHAR(9),

                                                   PRIMARY KEY (genreName))


                            ENGINE innoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;');  

if (!$genre) {  
  exit('<p>Error creating the genre table<br />'.  
      'Error: ' . mysql_error() . '</p>');  
} 
if ($genre) {  
  echo 'everything went just fine with genre table <br>';
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//create the film table 
$film = @mysql_query(    'CREATE TABLE IF NOT EXISTS film (
                                                    filmID           INT(9) auto_increment , 
                                                    filmName          CHAR(30), 
                                                    year              INT(4),
                                                    genreName       CHAR(15),
                                                CONSTRAINT  FOREIGN KEY (genreName) REFERENCES genre(genreName)ON DELETE CASCADE ON UPDATE CASCADE, 

                                                   PRIMARY KEY (filmID))


                            ENGINE innoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;');  

if (!$film) {  
  exit('<p>Error creating the film table<br />'.  
      'Error: ' . mysql_error() . '</p>');  
} 
if ($film) {  
  echo 'everything went just fine with film table <br>'; }

并尝试插入如下数据:

$sql = "INSERT INTO film (filmName,year,genreName)
VALUES ('The Avengers', '2012','action')";

并得到了这个错误:错误:INSERT INTO电影(filmName,year,genreName)VALUES('The Avengers','2012','action') 无法添加或更新子行:外键约束失败(osherbifilm,CONSTRAINT film_ibfk_1 FOREIGN KEY(genreName)REFERENCES genre({{ 1}})ON DELETE CASCADE ON UPDATE CASCADE)

1 个答案:

答案 0 :(得分:0)

我刚刚用你的帖子做了一个表,并得到了代码。试试这个。

film的表结构:

CREATE TABLE IF NOT EXISTS `film` (
`filmID` int(9) NOT NULL,
  `filmName` char(30) NOT NULL,
  `year` int(6) NOT NULL,
  `genreName` char(15) NOT NULL
) 

genre的表结构:

CREATE TABLE IF NOT EXISTS `genre` (
  `genreName` char(15) NOT NULL,
  `rated` char(9) NOT NULL
) 

film的索引:

ALTER TABLE `film`
 ADD PRIMARY KEY (`filmID`), ADD KEY `genreName` (`genreName`);

genre的索引:

ALTER TABLE `genre`
 ADD PRIMARY KEY (`genreName`);

film的约束:

ALTER TABLE `film`
ADD CONSTRAINT `film_ibfk_1` FOREIGN KEY (`genreName`) REFERENCES `genre` (`genreName`) ON DELETE CASCADE ON UPDATE CASCADE;


注意:

要插入数据,首先需要将数据插入genre表。如果您没有填写genre表中的任何内容,则在向film表插入数据时会填写表面错误,因为列genreName是引用genre的外键} table genreName列,最初为null。

将数据添加到genre表,例如

INSERT INTO `test1`.`genre` (`genreName`, `rated`) VALUES ('action', '5');

然后,对于film表,

INSERT INTO `test1`.`film` (`filmID`, `filmName`, `year`, `genreName`) VALUES ('1', 'The Avengers', '2012', 'action');

我刚试了一下。它正在发挥作用。祝你好运!