SQLite-命名约束语法

问题描述 投票:0回答:1

我想知道为什么以下语法有效:

CREATE TABLE tab1(id INT,
                  PRIMARY KEY (id) CONSTRAINT PK_tab1
                  -- here the CONSTRAINT is after PRIMARY KEY def
);

CREATE TABLE tab3(id INT,  
                  CHECK(id > 10) CONSTRAINT CHK_tab3_id 
);

通常我会期望:

CREATE TABLE tab2(id INT,
                  CONSTRAINT PK_tab2 PRIMARY KEY (id) 
); 

db<>fiddle SQLite demo

根据文档,它似乎是无效的语法:

CREATE TABLE table_constraint

enter image description here


对于PostgreSQL / Oracle / MySQL / SQL Server,以上语法返回错误:db<>fiddle demo PostgreSQL

这是与DB2 / Informix的某种兼容模式吗?

sql sqlite create-table check-constraints
1个回答
0
投票

您缺少的是在column-def图中。

enter image description here

注意column-constraint部分中的循环;单个列可以具有多个约束。因此,您的第一个示例具有主键,然后是第二个命名约束,该约束实际上没有应用任何实际规则-这是不寻常的,因为图中暗示不应这样做。但是,在列定义方面,sqlite3解析器非常非常非常宽容,并且允许官方语法图建议不要这样做。

© www.soinside.com 2019 - 2024. All rights reserved.