5

主キー列に挿入された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 値が拒否され、主キー制約が保持されるようにテーブルを定義するにはどうすればよいですか?

4

2 に答える 2

-2

データを挿入する必要があるときに (テーブルの再作成以外で) 自動インクリメントを無効にする 1 つの方法は、sqlite3 のインポート ツールを使用することです。

次のようなテーブルがある場合:

CREATE TABLE [table1] ( [ID] integer PRIMARY KEY AUTOINCREMENT NOT NULL, [col1] TEXT);

データ ファイルを使用してインポート コマンドを実行すると、次のようになります。

ID col1
10 abc
20 def

import myfile.txt table1

行をインポートし、自動インクリメント機能を無視します。

于 2015-01-15T16:47:15.550 に答える