2016-04-04 4 views
0

Я использую SQLite DB Browser v3.7.0. Если я создаю таблицу, используя следующий синтаксис:SQLite Check Constraints и SQLite DB Browser

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 Browser 3.7.0 Error

Однако, если изменить ограничение быть либо один из:

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

Затем SQLite DB Browser, как представляется, правильно проанализировать все. Мой вопрос в том, является ли синтаксис выше недопустимого SQLite, или это проблема, которую необходимо сообщить в команду SQLite DB Browser? Благодарю.

EDIT

Я также протестировали в SQLite DB Browser 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) 
); 

Edit: ограничения также работать как задумано:

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 
Смежные вопросы