我正准备在我创建的电影数据库中填充几个表格。已创建Movies
表。它看起来像这样:
movieid INT NOT NULL PRIMARY KEY
title VARCHAR(50)
link VARCHAR(100)
release_date VARCHAR(10)
或许应该注意,我正在使用MySQL-python
和Scrapy
在MySQL
数据库中填充此数据,但这可能无关紧要。
我创建了另外三个尚未填充的表:Producers
,Actors
和Directors
。其中每个都与另一个相似,因为存在id
,name
和movie 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
的表,其中包含movieid
表中的Movie
和actorid
表中的Actor
title
表中没有Actors
列。
我认为有两种方法可以做到这一点:
第一种方式:
将所有数据放入Actors
表中,title
作为foreign key
,然后创建Movie To Actor
表,添加相应的ids
其中movies.title
等于Actors.title
,然后从title
删除Actors
列。
第二种方式:
这样做,因为我正在填充数据。首先创建Movie to Actor
表,设置关键约束并将其设置为自动更新,因为数据已添加到Actors
表中。我更喜欢这个,因为它使事情变得更加容易,我认为风格更好。希望有人能指导我如何做到这一点。我想我可以弄清楚如何将MySQL
中的说明推断为MySQL-python
,但需要有关如何做前者的帮助。
答案 0 :(得分:1)
首先关注几个点:
对于您提到的第一种方法,您实际上可以首先创建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表(例如,在添加演员之后,您可以设置他/她所在的任何电影,只需添加映射到movie_actor表)。然后,如果你想获得一个演员的电影列表,你可以
SELECT title FROM movie_actor
INNER JOIN movies ON movies.movieid=movie_actor.movieid
WHERE actorid=????