我想从Teams&Teams_Members。Teams表中的id
是主键,也是Teams_members表中称为team_team_id
的外键。
我试过使用这个:
DELETE `teams`, `teams_members`
FROM `teams`
LEFT JOIN `teams_members`
ON `teams`.`id` = `teams_members`.`team_team_id`
WHERE `teams`.`id` = 2;
但我得到了这个错误:
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`animatordb`.`teams_members`, CONSTRAINT `fk_teams_members_team` FOREIGN KEY (`team_team_id`) REFERENCES `teams` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
如何实现我的目标,更具体地说,我想在PHP中实现这一目标。我正在使用Codeigniter。
在Transactions
中使用2个查询,如下所示:
//start Transactions
DELETE FROM team_members WHERE team_team_id= 2;
DELETE FROM teams WHERE id = 2;
//commit or rollback.
首先删除团队成员,然后中的团队进行单独删除。
如果您想确保两个删除执行都将您的删除封装在事务中
您只需要先从team_members中删除,然后才能从teams表中删除。
如果你想用CodeIgniter在PHP中做到这一点,那么这个链接可能会被证明是有用的
使用代码点火器从数据库中删除PHP
您可以尝试级联表。所以,当您删除/更新主表时,其他关系表会自动更改。
我想多表语法只有在从单个表中删除时才有用。要从两个表中删除,逐个删除要好得多。从包含外键的表中删除第一个&然后是另一张桌子。
这是我最后写的代码,
$this->db->trans_start();
$this->db->query("DELETE FROM teams_members WHERE team_team_id='$teamid';");
$this->db->query("DELETE FROM teams WHERE id='$teamid';");
$this->db->trans_complete();
我正在使用Codeigniter,正如我在问题中提到的那样。