SQLite的输出';s外键列表pragma
使用具有以下模式的SQLite3: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
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补充道,答案是完美的!再次感谢您!完美的再次感谢您!