Mysql 无法删除或更新父行:外键约束失败。但是外键仍然存在

Mysql 无法删除或更新父行:外键约束失败。但是外键仍然存在,mysql,codeigniter,foreign-keys,phpstorm,Mysql,Codeigniter,Foreign Keys,Phpstorm,错误: 创建查询: Cannot delete or update a parent row: a foreign key constraint fails (`databasename`.`webapp_requestsuser`, CONSTRAINT `fk_perRequests` FOREIGN KEY (`requestsid`) REFERENCES `webapp_requests` (`id`)) 内容webapp_请求: CREATE TABLE `webapp_requ

错误:

创建查询:

Cannot delete or update a parent row: a foreign key constraint fails
(`databasename`.`webapp_requestsuser`, CONSTRAINT `fk_perRequests` FOREIGN KEY 
(`requestsid`) REFERENCES `webapp_requests` (`id`))
内容webapp_请求:

CREATE TABLE `webapp_requests` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL,
`opentime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`starttime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`description` longtext,
`duration` double DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

CREATE TABLE `webapp_requestsuser` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` int(11) NOT NULL,
`status` tinyint(4) DEFAULT '0',
`requestsid` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `requestsid` (`requestsid`),
CONSTRAINT `fk_perRequests` FOREIGN KEY (`requestsid`) REFERENCES `webapp_requests` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
内容webapp_请求者:

_______________________________________
| id          = 2                     |
| userid      = 2                     |
| opentime    = 2015-11-24 16:26:44   |
| starttime   = 2015-11-24 16:26:44   |
| description = This is a description |
| duration    = 5.0                   |
_______________________________________
删除查询:

_______________________________________
| id          = 3                     |
| user        = 1                     |
| status      = 0                     |
| requestsid  = 2                     |
_______________________________________
当我想删除webapp_请求中的一行时,我总是得到这样的结果

我认真地尝试了这里已经提出的每一个可能的问题,但都解决不了。是的,我知道FKs是如何工作的。此外,我使用此函数插入数据:

DELETE FROM `webapp_requests` WHERE `id` = 2;
你的“创造”工作很好

问题是您正在删除引用表(
webapp\u requests
)中违反约束的行

因此它将孤立引用表中的一行(
webapp\u requestsuser
)。至少有一行写着我的父母现在在哪里?我的
requestsid
是2,但在引用的表中不再有id=2

数据库引擎说,你告诉我不允许,我也不允许

级联删除 对于那些希望看到级联删除示例的人,请参见。

“是的,我知道FKs是如何工作的。”然后向我们解释。因为在FK存在时删除父项并孤立子项似乎是问题所在。我删除了有子项的父项的记录1。1没有父项的子项如何存在?您必须先删除子项,然后删除父项。。。或者您需要启用“级联删除”;但这可能很危险!
public function createRequest($userid, $recipients, $description, $duration, $starttime)
{
    $existcheck = $this->db->query('SELECT * FROM `webapp_requests` WHERE `userid`=('.$this->db->escape($userid).')');
    // Check if already a request is registered
    if ($existcheck->num_rows() > 0) {
        return false;
    }
    // First add the request
    $query = $this->db->query('INSERT INTO `webapp_requests`( `userid`, `description`, `duration`, `starttime`) VALUES (' . $this->db->escape($userid) . ',' . $this->db->escape($description) . ',' . $this->db->escape($duration) . ',' . $this->db->escape($starttime) . ')');
    $id = $this->db->insert_id();
    if (!$query) {
        return false;
    } else {
        // Then add the users to the request
        $tokens = [];
        foreach($recipients as $recipient) {
            $this->db->query('INSERT INTO `webapp_requestsuser`(`user`,`requestsid`) VALUES (' . $this->db->escape($recipient) . ',' . $this->db->escape($id) . ')');
            $pushValue = $this->db->query('SELECT * FROM `notificationtoken` WHERE `user`=('.$this->db->escape($recipient).')')->row();
            array_push($tokens, $pushValue);
        }
        return $tokens;
    }
}