无法在我的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')
无法添加或更新子行:外键约束失败(osherbi
。film
,CONSTRAINT film_ibfk_1
FOREIGN KEY(genreName
)REFERENCES genre
({{ 1}})ON DELETE CASCADE ON UPDATE CASCADE)
答案 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');
我刚试了一下。它正在发挥作用。祝你好运!