SqLite.JS Uncaught ошибка: не удалось проверить ограничение


Я пытаюсь вставить значения в таблицу в SQLite, но получаю

SqLite.JS Uncaught ошибка: провалилось ограничение проверки: st .

Я не могу найти ни одной ошибки. Может кто-нибудь помочь разобраться в ошибке?

Вот мой оператор create table:

CREATE TABLE st(EMPLOYE_ID TEXT primary key ,  EMPLOYE_Name text NOT NULL ,
father_name text NOT NULL, cnic INTEGER NOT NULL,DOB real not null,address 
text not null,
 username text not null,password text not null, post text not null 
CHECK(typeof(employe_id)='text' AND length(employe_id)<=10 and 
(employe_name)='text'  AND 
length(employe_name)<=100 and (father_name)='text' 
 AND length(father_name)<=100  and(cnic)='integer' AND length(cnic)=13 and 
(address)='text' and length(address)<=200 
and (username)='text'
 and length(username)<=10 and (password)='text' and length(password)<=20)   
);

И вот мое заявление о вставке.

insert into st values('a1','jamshaid','iqbal',1110332507339,julianday('1998-
10-05'),'26 eb rehmkot','a1','a1','Admin');
1 2

1 ответ:

Прежде всего: всегда указывайте список столбцов

insert into st(employe_id, employe_name, father_name, cnic, DOB, address, username, password,post)
values('a1','jamshaid','iqbal',1110332507339,julianday('1998-10-05'),'26 eb rehmkot','a1','a1','Admin');

Во-вторых, облегчите чтение и отладку с помощью форматирования:

CREATE TABLE st(
 EMPLOYE_ID TEXT primary key ,              -- typo: employee_id, and why not INT
 EMPLOYE_Name text NOT NULL ,
 father_name text NOT NULL,
 cnic INTEGER NOT NULL,
 DOB real not null,                         -- why is DOB real and not DATE???
 address text not null,
 username text not null,
 password text not null,                    -- I hope this is not clear text
 post text not null 
CHECK(
  typeof(employe_id)='text' 
 AND length(employe_id)<=10 
 and typeof(employe_name)='text'  
 AND length(employe_name)<=100 
 and typeof(father_name)='text' 
 AND length(father_name)<=100  
 and typeof(cnic)='integer' 
 AND length(cnic)=13 
 and typeof(address)='text' 
 and length(address)<=200 
 and typeof(username)='text'
 and length(username)<=10 
 and typeof(password)='text' 
 and length(password)<=20
 )   
);

Вы можете легко обнаружить свою ошибку таким образом или просто комментировать строки, пока она не заработает.

Демо DBFiddle