SQLite的输出';s外键列表pragma

SQLite的输出';s外键列表pragma,sqlite,foreign-keys,pragma,Sqlite,Foreign Keys,Pragma,使用具有以下模式的SQLite3: CREATE TABLE Customers(ID INTEGER PRIMARY KEY, Company TEXT NOT NULL UNIQUE, Country TEXT NOT NULL, City TEXT NOT NULL); CREATE TABLE Orders(ID INTEGER PRIMARY KEY, CustomerID INTEGER NOT NULL, FOREIGN KEY(CustomerID) REFERENCES Cus

使用具有以下模式的SQLite3:

CREATE TABLE Customers(ID INTEGER PRIMARY KEY, Company TEXT NOT NULL UNIQUE, Country TEXT NOT NULL, City TEXT NOT NULL);
CREATE TABLE Orders(ID INTEGER PRIMARY KEY, CustomerID INTEGER NOT NULL, FOREIGN KEY(CustomerID) REFERENCES Customers(ID) ON DELETE RESTRICT ON UPDATE RESTRICT);
并发出此命令:

PRAGMA foreign_key_list(Orders);
结果如下:

0|0|Customers|CustomerID|ID|RESTRICT|RESTRICT|NONE
由于没有说明这个pragma输出的含义,除了明显的(Customers-Parent表、CustomerID-Child键、ID-Parent键、RESTRICT-ON-DELETE和第二个RESTRICT-ON-UPDATE)之外,我假定没有任何一个响应于不支持的MATCH子句


我自己搞不懂的是前两个零的意思。有人能告诉我它是什么吗?

PRAGMA foreign\u key\u list()的输出按顺序由以下列组成-

id
seq
更新时
删除时
匹配

因此,在输出中,前两个
0
s用于
id
seq

以下面的示例为例,在sqlite3 cli中执行,标题和列选项为-

CREATE TABLE Test (first INTEGER, second INTEGER, FOREIGN KEY (first) REFERENCES A(a) ON DELETE CASCADE, FOREIGN KEY (second) REFERENCES B(x) ON DELETE CASCADE);
sqlite> 
sqlite> PRAGMA foreign_key_list(Test);
id          seq         table       from        to          on_update   on_delete   match     
----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------
0           0           B           second      x           NO ACTION   CASCADE     NONE      
1           0           A           first       a           NO ACTION   CASCADE     NONE 
我知道表
Test
看起来像一场噩梦,但暂时忽略可怕的模式

您可以看到表
Test
中有两个外键,因此在
PRAGMA foreign\u key\u list()
output中显示了两个条目。您可以看到
id
字段值分别为0和1,但
seq
值均为0

正如您可能知道的,sqlite允许在外键语句中使用多个列名。 那么,如果你举下一个例子-

sqlite> CREATE TABLE Test2 (first INTEGER, second INTEGER, FOREIGN KEY (first, second) REFERENCES A(a, b) ON DELETE CASCADE);
sqlite> 
sqlite> PRAGMA foreign_key_list(Test2);
id          seq         table       from        to          on_update   on_delete   match     
----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------
0           0           A           first       a           NO ACTION   CASCADE     NONE      
0           1           A           second      b           NO ACTION   CASCADE     NONE  

因此,多列键会在输出中产生多行,
id
与这实际上是一个键相同。但是
seq
值不同,因为键中有多个列。

PRAGMA foreign\u key\u list()的输出按顺序由以下列组成-

id
seq
更新时
删除时
匹配

因此,在输出中,前两个
0
s用于
id
seq

以下面的示例为例,在sqlite3 cli中执行,标题和列选项为-

CREATE TABLE Test (first INTEGER, second INTEGER, FOREIGN KEY (first) REFERENCES A(a) ON DELETE CASCADE, FOREIGN KEY (second) REFERENCES B(x) ON DELETE CASCADE);
sqlite> 
sqlite> PRAGMA foreign_key_list(Test);
id          seq         table       from        to          on_update   on_delete   match     
----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------
0           0           B           second      x           NO ACTION   CASCADE     NONE      
1           0           A           first       a           NO ACTION   CASCADE     NONE 
我知道表
Test
看起来像一场噩梦,但暂时忽略可怕的模式

您可以看到表
Test
中有两个外键,因此在
PRAGMA foreign\u key\u list()
output中显示了两个条目。您可以看到
id
字段值分别为0和1,但
seq
值均为0

正如您可能知道的,sqlite允许在外键语句中使用多个列名。 那么,如果你举下一个例子-

sqlite> CREATE TABLE Test2 (first INTEGER, second INTEGER, FOREIGN KEY (first, second) REFERENCES A(a, b) ON DELETE CASCADE);
sqlite> 
sqlite> PRAGMA foreign_key_list(Test2);
id          seq         table       from        to          on_update   on_delete   match     
----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------
0           0           A           first       a           NO ACTION   CASCADE     NONE      
0           1           A           second      b           NO ACTION   CASCADE     NONE  

因此,多列键会在输出中产生多行,
id
与这实际上是一个键相同。但是
seq
值不同,因为键中有多个列。

前两个是
id
seq
id
表示表中外键的唯一标识符。如果有多个外键,
id
将是0,1,…
seq
是键的列序列号。用于多栏外文key@kuro请写下来作为回答。谢谢你提供的信息,@kuro!正如CL所说,将此作为答案添加,以便我可以接受。我想请你分享(如果可能的话)这些信息的来源。知道从哪里可以读到这本书会很有帮助。@scopchanov补充道,答案前两个是
id
seq
id
表示表中外键的唯一标识符。如果有多个外键,
id
将是0,1,…
seq
是键的列序列号。用于多栏外文key@kuro请写下来作为回答。谢谢你提供的信息,@kuro!正如CL所说,将此作为答案添加,以便我可以接受。我想请你分享(如果可能的话)这些信息的来源。知道在哪里可以读到这本书会很有帮助。@scopchanov补充道,答案是完美的!再次感谢您!完美的再次感谢您!