我正在尝试将值插入到我的注解表中,但遇到错误。它说我不能添加或更新子行,我不知道这是什么意思。我的架构如下所示:
--
-- Baza danych: `koxu1996_test`
--
-- --------------------------------------------------------
--
-- Struktura tabeli dla tabeli `user`
--
CREATE TABLE IF NOT EXISTS `user` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`username` varchar(32) COLLATE utf8_bin NOT NULL,
`password` varchar(64) COLLATE utf8_bin NOT NULL,
`password_real` char(32) COLLATE utf8_bin NOT NULL,
`email` varchar(32) COLLATE utf8_bin NOT NULL,
`code` char(8) COLLATE utf8_bin NOT NULL,
`activated` enum('0','1') COLLATE utf8_bin NOT NULL DEFAULT '0',
`activation_key` char(32) COLLATE utf8_bin NOT NULL,
`reset_key` varchar(32) COLLATE utf8_bin NOT NULL,
`name` varchar(32) COLLATE utf8_bin NOT NULL,
`street` varchar(32) COLLATE utf8_bin NOT NULL,
`house_number` varchar(32) COLLATE utf8_bin NOT NULL,
`apartment_number` varchar(32) COLLATE utf8_bin NOT NULL,
`city` varchar(32) COLLATE utf8_bin NOT NULL,
`zip_code` varchar(32) COLLATE utf8_bin NOT NULL,
`phone_number` varchar(16) COLLATE utf8_bin NOT NULL,
`country` int(8) NOT NULL,
`province` int(8) NOT NULL,
`pesel` varchar(32) COLLATE utf8_bin NOT NULL,
`register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`authorised_time` datetime NOT NULL,
`edit_time` datetime NOT NULL,
`saldo` decimal(9,2) NOT NULL,
`referer_id` int(8) NOT NULL,
`level` int(8) NOT NULL,
PRIMARY KEY (`id`),
KEY `country` (`country`),
KEY `province` (`province`),
KEY `referer_id` (`referer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=83 ;
我正在尝试执行的MySQL语句如下所示:
INSERT INTO `user` (`password`, `code`, `activation_key`, `reset_key`, `register_time`, `edit_time`, `saldo`, `referer_id`, `level`) VALUES (:yp0, :yp1, :yp2, :yp3, NOW(), NOW(), :yp4, :yp5, :yp6). Bound with :yp0='fa1269ea0d8c8723b5734305e48f7d46', :yp1='F154', :yp2='adc53c85bb2982e4b719470d3c247973', :yp3='', :yp4='0', :yp5=0, :yp6=1
我收到的错误如下所示:
SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(koxu1996_test
.user
,约束user_ibfk_1
外键(country
)引用country_type
(id
)on DELETE NO ACTION ON UPDATE NO ACTION)
10条答案
按热度按时间bksxznpy1#
这仅仅意味着您正在插入的表COMMENTS上的COUNTRY列的值在表COUNTRY_TYPE上不存在,或者您没有在表USER上插入COUNTRY的值。请记住,表COMMENTS上的COUNTRY列的值取决于表COUNTRY_TYPE上的ID的值。
ryoqjall2#
这个表和另一个表之间有外键,而新行将违反该约束。
如果运行
show create table user
,您应该能够看到约束,它显示为CONSTRAINT...
,并显示哪些列引用了哪些表/列。在本例中,
country
引用country_type (id)
,而您没有指定country
的值。您需要放置country_type
中存在的值。rqqzpn5f3#
我只是提出我自己的问题,以防它可以帮助其他人,我复制/粘贴我的迁移文件中的条目,并通过在整数周围加引号来搞砸。由于我试图输入的值被认为是要进入引用另一个整数的整型字段的字符串,因此出现了这个错误。
00jrzges4#
另一种选择可能是源表中的主键不是无符号的,所以我用(注意
id
int(8)无符号)解决了相同的INSERT:CREATE TABLE IF NOT EXISTS e1d1e(
id
int(8)unsign NOT NULL AUTO_INCREMENT,username
varchar(32)COLLATE UTF8_BIN NOT NULL,password
varchar(64)排序UTF8_bin非空,password_real
char(32)排序UTF8_bin非空,email
varchar(32)排序UTF8_bin非空,code
char(8)排序UTF8_bin非空,activated
枚举(‘0’,‘1’)排序UTF8_bin非空默认为‘0’,activation_key
char(32)排序UTF8_bin非空,reset_key
varchar(32)排序UTF8_bin非空,name
varchar(32)排序UTF8_bin非空,street
varchar(32)排序UTF8_bin非空,house_number
varchar(32)排序UTF8_bin非空,apartment_number
varchar(32)COLLE UTF8_bin NOT NULL、city
varchar(32)COLLE UTF8_bin NOT NULL、zip_code
varchar(32)COLLE UTF8_bin NOT NULL、phone_number
varchar(16)COLLE UTF8_BIN NOT NULL、country
int(8)NOT NULL、province
INT(8)NOT NULL、pesel
varchar(32)COLLATE UTF8_BIN NOT NULLregister_time
时间戳不为空默认Current_Timestamp,authorised_time
日期时间不为空,edit_time
日期时间不为空,saldo
十进制(9,2)不为空,referer_id
int(8)不为空,level
int(8)NOT NULL,主键(id
),键country
(country
),键province
(province
),键referer_id
(referer_id
))引擎=InnoDB默认字符集=UTF8 COLLATE=UTF8_BIN AUTO_INCREMENT=83;wvt8vs2t5#
在我的例子中,目标表列的值为空,而引用表列的值为空。因此抛出了这个错误。
ifmq2ha26#
在我的例子中,相关表上的引用值不对应。只需确保引用表上的值存在,并且Current行具有相应的有效值。
mznpcxlj7#
在我的例子中,在SQL命令中没有问题,但输入没有作为**$REQUEST**发送,所以在php.ini文件中:
MAX_INPUT_VARS默认设置为1000,我将其更改为:
然后,您必须重新启动Web服务器。
uujelgoq8#
对于空值,您应该传递
NULL
。非空字符串,如''
bprjcwpo9#
in my case this was the error: Illuminate\Database\QueryException SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'brand_name_ur' cannot be null (SQL: insert into
brands
(brand_name_en
,brand_name_ur
,brand_slug_en
,brand_slug_ur
,brand_image
) values (SAMI, ?, sami, سامی, upload/brand/1742772943246486.png))and fixed by
'brand_name_ur' => $request -> brand_image_ur, < changing brand_image_ur to brand_name_ur. Noob mistak. took my hour.
laawzig210#
thanks to @Tsimtsum
By running a request like :
it probably returns some rows and it should not !