简体   繁体   English

错误:无法添加或更新子行:外键约束失败?

[英]Error: Cannot add or update a child row: a foreign key constraint fails?

Error: Cannot add or update a child row: a foreign key constraint fails? 错误:无法添加或更新子行:外键约束失败? ( testlogin . leavetable , CONSTRAINT leavetable_ibfk_1 FOREIGN KEY testloginleavetable ,约束leavetable_ibfk_1 FOREIGN KEY
( users_id ) REFERENCES users ( id ) ON DELETE CASCADE ON UPDATE CASCADE) users_id )参考usersid )删除users_id

Been getting this message for the last day and a half. 在过去的一天半里一直收到此消息。 Trying to make a one to many (foreign key) relationship between the two tables. 试图在两个表之间建立一对多(外键)关系。 Between users:id and leavetable:users_id . users:idleavetable:users_id When user logs in they get a id. 用户登录时会获得一个ID。 when they submit a form to column hours I'd like for the id to stay with the form data. 当他们向专栏hours提交表单hours我希望ID保留在表单数据中。 It is throwing the error when someone creates a new id number and it wont update the leavetable:user_id . 当有人创建一个新的ID号时,它将leavetable:user_id错误,并且不会更新leavetable:user_id It throws the error above. 它引发上面的错误。

Here's my code: 这是我的代码:

CREATE TABLE IF NOT EXISTS `users` ( 
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
`id` int(11) NOT NULL, 
`password` char(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
`salt` char(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 



CREATE TABLE IF NOT EXISTS `leavetable` ( 
`hours` int(11) NOT NULL, 
`users_id` int(11) DEFAULT NOT NULL, 
`id` int(11) NOT NULL 
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


 ALTER TABLE `users` 
 ADD PRIMARY KEY (`id`) USING BTREE, 
 ADD UNIQUE KEY `email` (`email`) USING BTREE, 
 ADD UNIQUE KEY `username` (`username`) USING BTREE; 

 ALTER TABLE `leavetable` 
 ADD PRIMARY KEY (`id`) USING BTREE, 
 ADD KEY `users_id` (`users_id`) USING BTREE; 

 ALTER TABLE `leavetable` 
 MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 
 -- AUTO_INCREMENT for table `users` 
 ALTER TABLE `users` 
 MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 

ALTER TABLE `leavetable` 
ADD CONSTRAINT `leavetable_ibfk_1` FOREIGN KEY (`users_id`) REFERENCES
`users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

my table structure: 我的表结构:

+---------------------+
| Tables_in_testlogin |
+---------------------+
| leavetable          |
| users               |
+---------------------+

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| email    | varchar(255) | NO   | UNI | NULL    |                |
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| password | char(64)     | NO   |     | NULL    |                |
| salt     | char(16)     | NO   |     | NULL    |                |
| username | varchar(255) | NO   | UNI | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

+----------+---------+------+-----+---------+----------------+
| Field    | Type    | Null | Key | Default | Extra          |
+----------+---------+------+-----+---------+----------------+
| hours    | int(11) | NO   |     | NULL    |                |
| users_id | int(11) | NO   | MUL | NULL    |                |
| id       | int(11) | NO   | PRI | NULL    | auto_increment |
+----------+---------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

首先,您必须清除子表的数据,然后清除mastertable之间的外键,之后您才能清除任何数据

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM