从中删除由关系联接的两个表


Delete from Two tables in joined by a relationship

我想从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,正如我在问题中提到的那样。