【问题标题】:How to DELETE from Many to Many Realationship tables in PHP [duplicate]如何在PHP中从多对多关系表中删除[重复]
【发布时间】:2020-10-04 10:00:47
【问题描述】:

所以这是我的桌子的样子

表格:电影

#   Name    Type
1   movie_id Pk int(11)         
2   movie_name  text

表格:流派

#   Name    Type
1   genre_id Pk int(11)         
2   genres_name text

表格:movie_genres

#   Name    Type
1   id Pk   int(11)
2   movie_id Index  int(11) 
3   genres_id Index int(11) 

那么我怎样才能删除电影中的一行,以便其从流派和电影流派中的值也自动删除。

当我尝试从 phpmyadmin 删除行时,它显示错误:#1451 - 无法删除或更新父行:外键约束失败(123movies.movie_actors,CONSTRAINT movie_actors_ibfk_1 FOREIGN KEY(@987654327 @) 引用 movies (movie_id))

请帮帮我!如何以正确的方式做到这一点! (在 PHP 中)

【问题讨论】:

  • 该错误似乎与您显示的表格无关。它抱怨您在 movie_actors 中有一行引用了您要删除的电影。因此,您必须先从 movie_actors 中删除该行,然后才能继续
  • 在 MySQL 中查看 on deletecascade/set null。无论如何,这最好由数据库处理。

标签: mysql sql foreign-keys sql-delete


【解决方案1】:

首先,您不应该从流派表中删除记录,因为这些值已经或将用于其他电影。

你得到的错误是因为你有另一个表一对多 (movie_actors) 有一个外键来防止删除电影记录,你必须先从那个表中删除电影演员才能删除电影 解决方案 : 将movie_actor表的外键约束更改为on delete/update to cascade(现在是restrict)

在电影删除时将流派表上的 Foriegn 键添加到 Cascade:

ALTER TABLE movie_genres
ADD CONSTRAINT FK_movgen
FOREIGN KEY (`movie_id`) REFERENCES `movies` (`movie_id`) ON DELETE CASCADE ON UPDATE CASCADE;

【讨论】:

  • 谢谢!这个问题已经用 CASCADE 解决了!
猜你喜欢
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 2023-01-27
相关资源
最近更新 更多