主キー列に挿入されたnullが望ましくない自動インクリメントされているsqliteテーブル(sqliteバージョン3.7.3)があります:
sqlite> CREATE TABLE foo(bar INTEGER NOT NULL PRIMARY KEY);
sqlite> INSERT INTO foo(bar) VALUES(NULL);
sqlite> SELECT * FROM foo;
1
sqlite docsでは、列にキーワードを追加するとAUTOINCREMENT
この動作が発生するはずですが、自動インクリメントを防止するキーワードはないようです...
SQLITE_OMIT_AUTOINCREMENT
また、コンパイル オプションを使用して sqlite をビルドできることもわかりましたが、この特定の列だけのために、動作をグローバルに無効にしたくありません。
PRIMARY KEY
興味深いことに、制約を含めないと、望ましい動作が得られます。
sqlite> CREATE TABLE FOO(bar integer NOT NULL);
sqlite> INSERT INTO FOO(bar) VALUES(NULL);
SQL error: foo.bar may not be NULL
NULL 値が拒否され、主キー制約が保持されるようにテーブルを定義するにはどうすればよいですか?