当前位置: 首页 > 面试题库 >

如何使用多个表插入数据

微生俊健
2023-03-14
问题内容

我创建了一个数据库名称movielibrarysystem,其中有3个表。

分别是类型,发布者和电影..​​.现在1个发布者可以有很多电影,而1个电影则有很多类型..在movie表中,发布者ID和typeid都充当外键。

我的问题是,如何在电影表中插入数据…我已经将数据插入到发行商和类型表中,但是我无法插入电影表中。


问题答案:

这就是你要做的。首先,发行人与电影之间的关系是一对多的-
发行人可以发行许多电影,但每部电影只有一个发行人。但是,电影类型是多对多的关系(您声明一部电影是多种类型,但也有一种类型是许多电影的情况),因此您应该为该关系准备一个额外的表。

本质上:

publisher:
    publisher_id
    publisher_name
    <other publisher info>
type:
    type_id
    type_name
    <other type info>
movie:
    movie_id
    movie_name
    publisher_id references publisher(publisher_id)
    <other movie info>
movie_type:
    movie_id references movie(movie_id)
    type_id references type(type_id)

并为所有这些提供合适的主键。

然后,假设您已插入发布者和类型,则可以这样插入影片:

begin transaction;
insert into movie (movie_name,publisher_id) values (
    'Avatar',
    (select publisher_id from publisher where publisher_name = 'Spielberg')
);
insert into movie_type (movie_id,type_id) values (
    (select movie_id from movie where movie_name = 'Avatar'),
    (select type_id from type where type_name = 'SciFi')
);
insert into movie_type (movie_id,type_id) values (
    (select movie_id from movie where movie_name = 'Avatar'),
    (select type_id from type where type_name = 'GrownUpSmurfs')
);
commit;

换句话说,您使用子选择基于一组 唯一 的属性从相关表中获取ID
(上面的示例假定电影名称是唯一的,实际上,您将需要更具体的查询,例如处理不同的电影同名:例如,“欧米茄(Omega)男人”。

如果您使用的DBMS不支持值部分中的selects,那么最好的选择可能就是记住或使用所使用的任何编程语言将相关值提取到变量中,或者构造一个查询来完成。用伪代码:

begin transaction;
insert into movie (movie_name,publisher_id) values (
    'Avatar',
    (select publisher_id from publisher where publisher_name = 'Spielberg')
);
select movie_id into :m_id from movie where movie_name = 'Avatar';
select type_id into :t_id1 from type where type_name = 'SciFi';
select type_id into :t_id2 from type where type_name = 'GrownUpSmurfs';
insert into movie_type (movie_id,type_id) values (:m_id, :t_id1);
insert into movie_type (movie_id,type_id) values (:m_id, :t_id2);
commit;

针对您的评论:

嘿,我没说类型和电影关系的意思..请您详细说明这一点..关于阿比德

Avatar和Solaris都可以视为SciFi类型。如此多的电影属于一种类型。Xmen:Wolverine既可以视为动作,也可以视为漫画翻拍。一部电影有这么多种类型。

多对多关系最好用一个单独的表来表示,该表包含两个相关表之间的交叉匹配。



 类似资料:
  • 问题内容: 有人可以告诉我,以下JDBC代码中的第一个条件是否是针对两个不同的表执行两个不同的SQL查询? 问题答案: 在我的书中,我总是建议关闭已经打开的资源,以避免可能的泄漏。 一种更现代的方法是使用try-with- resources :

  • 问题内容: 我知道一次插入多个数据效率更高: 在golang中该怎么做? 使用字符串拼接,但这不是很好。db.Prepare更安全吧? 我需要一个功能更安全,更高效的函数,一次插入多个数据。 问题答案: 为什么不这样呢?(在此处编写但未进行测试,因此可能存在语法错误):

  • 我是新加入这个网站的。我有点小问题。我需要知道如何使用C#将数据插入多个SQL Server表。英语不是我的母语,所以如果有一些拼写错误,很抱歉。 这是我的C#代码 这是我运行此代码时遇到的错误。请帮助解决此问题

  • 我在数据库中有一个表: > < li> 用户角色(字典) id 名称(管理员、用户…) 用户登录 Id 电子邮件 密码 用户简介 Id 名字 姓氏 用户 Id IdUserLogin(FK) IdUserRole(FK) 标识用户配置文件(FK) 如何将值插入上述三个表? 我尝试了这样的东西: 控制器: JSP页面:

  • 问题内容: 我正在循环列表并将其插入数据库中,但它得到的更新记录一个接一个。最后我只在列表中的数据库最后一条记录中看到。 输入名称:Linux,Windows,Mac hibernate.cfg.xml: 这里有3次获得循环并插入数据库。但是以某种方式覆盖了这些值。因为我看到sql插入和更新在控制台中运行。 请帮助我将多个行插入数据库。 问题答案: Hibernate文档中有一章非常好的关于批处理

  • 问题内容: 我正在使用SQL Server 2005。 我正在将数据从当前数据库(单个表)迁移到新数据库(规范化-许多表)。在新数据库中,我有一个基表(我们称它为“ BaseTable”)和多个其他表(我们称它们为和)。来自旧数据库的某些数据将转到BaseTable,而另一些将转到其他两个。BaseTable与DependentA和DependentB都具有一对一关系,使用它们的ID作为外键。 所