sql >> データベース >  >> RDS >> SQLite

SQLitePRIMARYキーの自動インクリメントが機能しない

    ドキュメントから:

    CREATE TABLE ASを使用して作成されたテーブルには、PRIMARYKEYおよびいかなる種類の制約もありません。各列のデフォルト値はNULLです。

    UNIQUEを追加する必要はありません PRIMARY KEYを持つCOLUMNに対する制約 制約。
    説明:

    UNIQUE制約はPRIMARYKEY制約に似ていますが、単一のテーブルに任意の数のUNIQUE制約を含めることができる点が異なります。

    代わりに、NOT NULLを追加してください 。これが理由です:

    SQL標準によれば、PRIMARYKEYは常にNOTNULLを意味する必要があります。残念ながら、一部の初期バージョンのバグのため、SQLiteではそうではありません。列がINTEGERPRIMARYKEYであるか、テーブルがWITHOUT ROWIDテーブルであるか、列がNOT NULLと宣言されていない限り、SQLiteはPRIMARYKEY列でNULL値を許可します。 SQLiteは標準に準拠するように修正できますが、そうするとレガシーアプリケーションが破損する可能性があります。したがって、SQLiteがほとんどのPRIMARYKEY列でNULLを許可しているという事実を単に文書化することにしました。


    次の列定義を使用することをお勧めします:

    CREATE TABLE conversations (
        conversation_id INTEGER PRIMARY KEY NOT NULL AUTOINCREMENT,
    ...
    }
    


    1. MySQLとPostgreSQLのHAProxy統計を理解する

    2. TSQLを使用してデータベース内のすべてのテーブルのリストを取得するにはどうすればよいですか?

    3. SQLServerのGroupBy、Having、Where句の実行シーケンス?

    4. ゼロからデータベースモデルを作成する方法