繁体   English   中英

SQLite检查约束和SQLite数据库浏览器

[英]SQLite Check Constraints and SQLite DB Browser

我正在使用SQLite数据库浏览器v3.7.0。 如果我使用以下语法创建表:

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)。 这是一个问题,因为当我单击“新建记录”时,出现异常“ 添加记录时出错:在“附近”):语法错误(INSERT INTO''VALUES();) “。

SQLite DB浏览器3.7.0错误

但是,如果我将约束更改为以下之一:

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

然后,SQLite DB浏览器似乎可以正确解析所有内容。 我的问题是,上面的语法是无效的SQLite,还是这个问题需要报告给SQLite数据库浏览器团队? 谢谢。

编辑

我也在SQLite DB Browser v3.8.0中进行了测试,结果相似:

SQLite DB浏览器3.8.0错误

这是界面的错误。 在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

我认为这与问题#505:CHECK约束上的Sqlite解析错误有关 ,该错误已在1月18日修复。我下载了4月3日夜间发布的SQLite DB浏览器(v3.8.99),并验证了该版本中的所有功能均按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM