gpt4 book ai didi

MySQL:M:N 表链接两个表

转载 作者:行者123 更新时间:2023-11-29 13:38:39 25 4
gpt4 key购买 nike

我正准备填充我创建的电影数据库中的几个表。 Movies 表已创建。它看起来像这样:

 movieid INT NOT NULL PRIMARY KEY
title VARCHAR(50)
link VARCHAR(100)
release_date VARCHAR(10)

也许应该注意的是,我正在使用 MySQL-pythonScrapy 来填充 MySQL 数据库中的数据,但也许这并不重要。

我创建了三个尚未填充的附加表:ProducersActorsDirectors。其中每一个看起来都很相似,都存在 idnamemovie title。所以 Actors 看起来像:

 actorid INT NOT NULL PRIMARY KEY
actor VARCHAR(40)
title VARCHAR(50) <<<<------ This is the movie title from the Movies tables

现在,我想创建一个名为 Movie To Actor 的表,其中包含 Movie 表中的 movieid Actor 表中的 actorid,并且 Actors 表中不存在 title 列。

我认为有两种方法可以做到这一点:

第一种方法:

将所有数据放入 Actors 表中,并使用 title 作为外键,然后创建 Movie To Actor 表,添加适当的 ids,其中 movies.title 等于 Actors.title,然后删除 来自 Actors 的 title 列。

第二种方式:

在我填充数据时执行此操作。首先创建 Movie to Actor 表,设置关键约束并将其设置为在数据添加到 Actors 表时自动更新。我更喜欢这个,因为它使事情变得更加容易,而且我认为在风格上更好。希望有人能指导我如何去做这件事。我想我可以弄清楚如何将 MySQL 中的指令推断为 MySQL-python,但需要有关如何执行前者的帮助。

最佳答案

首先有几点:

  • 除非您手动填充类型转换和电影表中的 actorid 和 movieid 字段,否则您应该在这些列上设置 auto_increment。
  • 如果您使用 movie.title 链接到其他内容,则应向 movie 表中的该列添加唯一索引。
  • 您最终应该从类型转换中删除标题列。否则,您将有多个行表示同一 Actor 姓名(冗余),或者每个 Actor 只有一部电影(不现实)。

对于您提到的第一种方法,您实际上可以首先创建 movie_actor 表,然后然后填充现有数据:

INSERT INTO movie_actor (movieid, actorid) SELECT movieid, actorid FROM movies INNER JOIN actors ON actors.title=movies.title;

对于第二个,您可以使用触发器:

delimiter //
CREATE TRIGGER add_actor
AFTER INSERT ON actors
FOR EACH ROW BEGIN
SET @movieid = (SELECT movieid FROM movies WHERE title=NEW.title);
IF @movieid IS NOT NULL THEN
INSERT INTO movie_actor (movieid, actorid) VALUES (@movieid, NEW.actorid);
END IF;
END;
//
delimiter ;

我建议选择 1,然后使用您用来填充这些表的任何形式来独立填充 movie_actor 表(例如,添加 Actor 后,您可以设置他/她所在的任何电影,只需添加映射到 movie_actor 表)。然后,如果您想获取某个 Actor 的电影列表,您只需

SELECT title FROM movie_actor
INNER JOIN movies ON movies.movieid=movie_actor.movieid
WHERE actorid=????

关于MySQL:M:N 表链接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com