2016-04-04 46 views
0

我正在使用SQLite数据库浏览器v3.7.0。如果我创建使用的语法如下表:SQLite检查约束和SQLite数据库浏览器

CREATE TABLE "A" (
    "AREA" TEXT NOT NULL DEFAULT 'DEFAULT' 
     CONSTRAINT "A-AREA-MAX_LENGTH_CHECK" 
      CHECK(LENGTH("AREA") <= 25), 
    CONSTRAINT "A-AREA-UPPERCASE_NO_WHITESPACE_CHECK" 
     CHECK(UPPER("AREA") = "AREA" AND INSTR("AREA", ' ') = 0) 
); 

当我去SQLite的浏览器中的“浏览数据”选项卡上,我没有得到任何列显示出来(如果浏览器无法解析SQL作为)。这是一个问题,因为当我点击“New Record”时,出现异常“Error added record:near ”):syntax error(INSERT INTO''VALUES();)“。

SQLite DB Browser 3.7.0 Error

但是,如果我改变约束是的任何一个:

CHECK(UPPER("AREA") = "AREA") 
CHECK(INSTR("AREA", ' ') = 0) 

随后的SQLite数据库浏览器似乎正确地分析一切。我的问题是,上面的语法是无效的SQLite,还是这是一个需要报告给SQLite数据库浏览器团队的问题?谢谢。

编辑

我也是在SQLite的DB浏览器v3.8.0测试,具有相似的结果:

SQLite DB Browser 3.8.0 Error

回答

1

这是与接口的错误。运行在SQLite的3.8.2版本的代码生成表正确

sqlite> CREATE TABLE "A" (
    "AREA" TEXT NOT NULL DEFAULT 'DEFAULT' 
     CONSTRAINT "A-AREA-MAX_LENGTH_CHECK" 
      CHECK(LENGTH("AREA") <= 25), 
    CONSTRAINT "A-AREA-UPPERCASE_NO_WHITESPACE_CHECK" 
     CHECK(UPPER("AREA") = "AREA" AND INSTR("AREA", ' ') = 0) 
); 

sqlite> .schema A 
CREATE TABLE "A" (
    "AREA" TEXT NOT NULL DEFAULT 'DEFAULT' 
     CONSTRAINT "A-AREA-MAX_LENGTH_CHECK" 
      CHECK(LENGTH("AREA") <= 25), 
    CONSTRAINT "A-AREA-UPPERCASE_NO_WHITESPACE_CHECK" 
     CHECK(UPPER("AREA") = "AREA" AND INSTR("AREA", ' ') = 0) 
); 

编辑:约束也工作打算:

sqlite> insert into A values ("area"); 
Error: CHECK constraint failed: A-AREA-UPPERCASE_NO_WHITESPACE_CHECK 
sqlite> insert into A values ("AR EA"); 
Error: CHECK constraint failed: A-AREA-UPPERCASE_NO_WHITESPACE_CHECK 
sqlite> insert into A values ("AREA"); 
sqlite> select * from A; 
AREA