【问题标题】:SQLite - named constraint syntaxSQLite - 命名约束语法
【发布时间】:2020-03-24 11:07:57
【问题描述】:

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

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


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

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

【问题讨论】:

标签: sql sqlite create-table check-constraints


【解决方案1】:

column-def 图表中缺少的内容。

注意column-constraint 部分中的循环;单个列可以有多个约束。因此,您的第一个示例具有主键,然后是第二个命名约束,该约束实际上没有应用任何实际规则 - 这是不寻常的位,因为图表表明不应该被允许。然而,当涉及到列定义时,sqlite3 解析器非常、非常、非常宽容,并且允许官方语法图建议它不应该做的事情。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2011-05-18
相关资源
最近更新 更多