https://www.sqlite.org/withoutrowid.html
"NOT NULL is enforced on every column of the PRIMARY KEY in a WITHOUT ROWID table." It goes on to say that NOT NULL is supposed to be enforced on all PRIMARY KEY columns of _every_ table according to the SQL standard, but an early version of sqlite included a bug which allowed NULLs and as a result sqlite does not enforce this for ROWID tables. -Rowan On 19 January 2018 at 14:32, Shane Dev <devshan...@gmail.com> wrote: > Hello, > > The following SQL works as I expect - > > sqlite> CREATE TABLE edges(parent int, child int, primary key(parent, > child)); > sqlite> insert into edges select null, 1; > sqlite> select * from edges; > parent child > 1 > sqlite> > > but if I remove the superfluous rowid column from the table definition - > > sqlite> drop table edges; > sqlite> CREATE TABLE edges(parent int, child int, primary key(parent, > child)) without rowid; > sqlite> insert into edges select null, 1; > Error: NOT NULL constraint failed: edges.parent > sqlite> > > Why do I get this error? > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users