2013-11-25 109 views
1

我想从两个表中删除一行,队& Teams_Members。球队表中的id是一个主键,并且是一个名为team_team_id的teams_members表中的外键。从两个关联表中删除

我尝试使用这样的:

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。

+0

首先'删除team_members WHERE team_team_id = 2;'然后'删除队伍WHERE id = 2;' – Jompper

+0

为什么不直接执行两个删除查询,先从team_members删除,然后再删除team table?基本上,当你执行选择查询时,你选择的是不同类型的连接,例如左连接,内连接等,但是对于删除,你应该删除单个表中的记录而不是创建连接 - 这是无论php/raw mysql查询 –

+0

如果你看到我的编辑,我想用PHP做这个。 – user1601973

回答

0

我猜多表语法只有在从单个表中删除时才有用。要从两个表中删除,逐个删除要好得多。从包含外键&的表中首先删除,然后再删除另一个表。

下面是我使用笨,因为我在我的问题提到我最后写的代码,

 $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(); 

0

使用2查询在Transactions这样的:

//start Transactions 
DELETE FROM team_members WHERE team_team_id= 2; 
DELETE FROM teams WHERE id = 2; 
//commit or rollback. 
+0

我想你不能'删除*'。 – user1601973

+0

@ user1601973 Ok编辑。 – ops

0

首先删除团队成员那么团队将分离删除。

如果你想确保双方执行删除封装你删除一个事务

0

您可以通过级联表试试。所以,当你删除/更新主表时,其他关系表会自动改变。