Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 简单数据库。外键插入_Sql_Database - Fatal编程技术网

Sql 简单数据库。外键插入

Sql 简单数据库。外键插入,sql,database,Sql,Database,我有两个类别A和B,包括以下列: A类 _id | name _id | tableA_id |name B类 _id | name _id | tableA_id |name 项目列表 _id | name | tableB_id tableA\u id和tableB\u id是外键,\u id列是主键 B类是a的一个子类 name列是唯一的(每个表中只有一个类别) 我想插入5个项目,每个项目的类别为A和B 第1项: name: item1 category A: Movie Cat

我有两个类别A和B,包括以下列:

A类

_id | name
_id | tableA_id |name
B类

_id | name
_id | tableA_id |name
项目列表

_id | name | tableB_id
tableA\u id
tableB\u id
是外键,\u id列是主键

B类是a的一个子类

name
列是唯一的(每个表中只有一个类别)

我想插入5个项目,每个项目的类别为A和B

第1项:

name: item1
category A: Movie
Category B: Action
name: item2
category A: Movie
Category B: Drama
name: item3
category A: Movie
Category B: Comedy
name: item4
category A: Music
Category B: Pop
name: item5
category A: Music
Category B: Rock
第2项:

name: item1
category A: Movie
Category B: Action
name: item2
category A: Movie
Category B: Drama
name: item3
category A: Movie
Category B: Comedy
name: item4
category A: Music
Category B: Pop
name: item5
category A: Music
Category B: Rock
第3项:

name: item1
category A: Movie
Category B: Action
name: item2
category A: Movie
Category B: Drama
name: item3
category A: Movie
Category B: Comedy
name: item4
category A: Music
Category B: Pop
name: item5
category A: Music
Category B: Rock
第4项:

name: item1
category A: Movie
Category B: Action
name: item2
category A: Movie
Category B: Drama
name: item3
category A: Movie
Category B: Comedy
name: item4
category A: Music
Category B: Pop
name: item5
category A: Music
Category B: Rock
第5项:

name: item1
category A: Movie
Category B: Action
name: item2
category A: Movie
Category B: Drama
name: item3
category A: Movie
Category B: Comedy
name: item4
category A: Music
Category B: Pop
name: item5
category A: Music
Category B: Rock
如何在不查询外键对应主键的ID的情况下填充外键


还是我缺少数据库设计的一个重要部分?

如果您的数据库设计“正确”,为了防止损坏,您将无法插入没有父项的子记录

为了获得父密钥,无需重新查询,请阅读以下精彩文章:


如果您的数据库设计“正确”,为了防止损坏,您将无法插入没有父项的子记录

为了获得父密钥,无需重新查询,请阅读以下精彩文章:

如何在不查询外键对应主键的ID的情况下填充外键

如果我正确理解了您的问题,那么在将新记录插入表
列表
时,如果不查询Rock的ID(即不查询),就无法填充外键

select _id,  tableA_id
from Category_B
where name = 'Rock'
如何在不查询外键对应主键的ID的情况下填充外键

如果我正确理解了您的问题,那么在将新记录插入表
列表
时,如果不查询Rock的ID(即不查询),就无法填充外键

select _id,  tableA_id
from Category_B
where name = 'Rock'

首先填充类别A和类别B


然后插入到项目列表中,知道类别ID。

首先填充类别A和类别B


然后插入到项目列表中,知道类别ID。

您的意思是,要插入项目,我必须:1-插入类别A,2-查询A的ID并插入类别B,然后查询类别B的ID并插入项目?我认为它的操作太多,无法插入单个项目。还有别的办法吗?是的。我猜ID是由RDBMS生成的序列,否则您可能已经知道了值。我还建议您在类别名称上添加一个唯一索引,并在插入时使用触发器将其转换为全大写或全小写。否则你会得到一个“电影”类别,一个“电影”类别,一个“电影”类别,一个“电影”类别等等。你的意思是,要插入一个项目,我必须:1-插入类别a,2-查询a的_id并插入类别B,然后查询类别B的_id并插入项目?我认为它的操作太多,无法插入单个项目。还有别的办法吗?是的。我猜ID是由RDBMS生成的序列,否则您可能已经知道了值。我还建议您在类别名称上添加一个唯一索引,并在插入时使用触发器将其转换为全大写或全小写。否则,您将得到一个“电影”类别、一个“电影”类别、一个“电影”类别、一个“电影”类别等等。