Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL错误1452仅在使用自动增量从PHP页面插入行时发生_Php_Mysql_Foreign Keys_Mysql Error 1452 - Fatal编程技术网

SQL错误1452仅在使用自动增量从PHP页面插入行时发生

SQL错误1452仅在使用自动增量从PHP页面插入行时发生,php,mysql,foreign-keys,mysql-error-1452,Php,Mysql,Foreign Keys,Mysql Error 1452,编辑:我尝试从PhpMyAdmin插入。我注意到,如果我只是执行GenreName,而不输入ID,则自动增量会给我2147483647的行ID: 插入到流派(流派重命名) 值('TestFrompMyAdmin') 我以前直接在MySQL数据库中工作时遇到过这样的错误,但是我在这个新数据库上尝试的所有错误都没有起作用。我已经用尽了尽可能多的StackOverflow帖子,但是没有一个解决方案最终奏效。我已经明确检查了这两个表中的ID是否可用。另外,当我的页面只是有一个带有AlbumID和Albu

编辑:我尝试从PhpMyAdmin插入。我注意到,如果我只是执行GenreName,而不输入ID,则自动增量会给我2147483647的行ID: 插入到流派(流派重命名) 值('TestFrompMyAdmin')

我以前直接在MySQL数据库中工作时遇到过这样的错误,但是我在这个新数据库上尝试的所有错误都没有起作用。我已经用尽了尽可能多的StackOverflow帖子,但是没有一个解决方案最终奏效。我已经明确检查了这两个表中的ID是否可用。另外,当我的页面只是有一个带有AlbumID和AlbumName文本输入的表单时,它就起作用了,但我想去掉AlbumID的文本输入,因为它在MySQL数据库中自动递增,所以用户不必键入/猜测新的ID

错误:SQL错误: 号码:1452 错误:无法添加或更新子行:外键约束失败(
andrew79_601
相册
,约束
相册
外键(
ArtistID
)引用
艺术家(
ArtistID

当我在我的addalbum.php页面上时会发生这种情况。 这是我正在使用的代码: addalbum.php


相册名称:
类型ID: ------挑选------- 艺术家编号: ------挑选-------
addalbumsrv.php:


错误消息表示试图在“Albums”表中插入或更新一行,为“ArtistID”列提供的值无效

外键约束正在强制执行一个规则:“ArtistID”列中的值必须与“Artists”表的“ArtistID”列中的值匹配

艺术家

ArtistID  artist_name
--------  -----------
     112  Rush
相册

AlbumID  ... ArtistID ...
-------      --------
   2112           112  
如果我们试图在“相册”中插入一行

MySQL将检查为“ArtistID”列提供的值是否出现在“Artists”表中

当MySQL(InnoDB)在“Albums”中找不到在“ArtistID”列中具有匹配值的行时,它将抛出外键约束错误

这就是MySQL报告的内容:“艺术家”中没有匹配的行

要解决此问题,“INSERT INTO Albums”语句必须为“ArtistID”提供有效值

如果列允许空值,我们可以插入空值。那么这张专辑就与艺术家无关了


鉴于代码中所示的语句:

INSERT INTO Albums (AlbumName) VALUES ('something')
“ArtistID”列必须使用非NULL的默认值定义,或者存在一个BEFORE INSERT触发器,该触发器正在分配非NULL值

这句话大概应该是这样的:

INSERT INTO Albums (AlbumName,ArtistID) VALUES ('something',112)
                             ^^^^^^^^^                     ^^^^
为ArtistID列提供了有效值

INSERT INTO Albums (..., ArtistID ,...) VALUES (..., 707 ,...) 
INSERT INTO Albums (AlbumName) VALUES ('something')
INSERT INTO Albums (AlbumName,ArtistID) VALUES ('something',112)
                             ^^^^^^^^^                     ^^^^