mysql - SQL一对多用户外键问题

标签 mysql sql

Error: Cannot add or update a child row: a foreign key constraint fails? (testlogin.leavetable, CONSTRAINT leavetable_ibfk_1 FOREIGN KEY
(users_id) REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE)

过去一天半以来一直收到此消息。尝试在两个表之间建立一对多(外键)关系。在 users:idleavetable:users_id 之间。当用户登录时,他们会获得一个 id。当他们向 hours 列提交表单时,我希望 id 与表单数据保持一致。当有人创建新的 ID 号并且不会更新 leavetable:user_id 时,它会抛出错误。它会抛出上面的错误。

发生什么事了?我以正确的方式处理这个问题吗?

这是我的代码:

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;

我的表结构:

+---------------------+
| 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)

PHP 代码:

  mysql_select_db("testlogin", $con);
$sql="INSERT INTO leavetable (hours)
VALUES
('$_POST[hours]')";
if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }

最佳答案

$sql="INSERT INTO leavetable (hours)
VALUES
('$_POST[hours]')";

上面的sql代码不包含任何对用户id的引用。 mysql应该如何猜测这个休假条目属于哪个用户?在插入语句的列和值部分中包含 tge 用户 ID。也许您应该将用户 ID 存储在 php session 中。

关于mysql - SQL一对多用户外键问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33107851/

相关文章:

php - 插入带有 Select 和附加参数的 stmt

sql - 来自 Postgres API 的嵌套 JSON,模式不存在?

mysql - 如何在左连接表中应用CASE

Mysql 为表创建查询

mysql - 谁对给定文本的推文最多?

php - 用于填充字母表词汇表的 MySQL 单个查询

c# - Entity Framework 错误,额外的小数位

mysql - 生成 MySQL 模式的 ERD 工具

PHP PDO MYSQL 重复更新

mysql - 在两列中查找具有最大匹配字符串的行