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

AndroidのSQLite:外部キーと<テーブル制約>が必要

    あなたの問題は、 column_constraintを混同していることです table_constraintを使用した構文 構文( つまり、前者を使用する必要がある場合に後者をコーディングします 。

    を使用して問題を修正できます

    db.execSQL("CREATE TABLE " + QUEST_TABLE_NAME + "(id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL REFERENCES categories (id), date TEXT");

    以下で説明するように、代替構文も同様です。

    つまり、列制約の構文は REFERENCES ....で始まります。 これは列定義の一部です(つまり、列名は暗黙的です)が、table_constraint構文は FORIEGN KEY(column_name) REFERENCES ...で始まります。 列の定義に従います

    だからあなたはどちらかを持つことができます:-

    Column_constraint構文

    • 列定義の一部として

    • category INTEGER NOT NULL REFERENCES categories (id)

    例:

    CREATE TABLE yourtablename (id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL REFERENCES categories (id), date TEXT)
    

    または

    Table_constraint構文

    • 列が定義された後でも、列定義内、つまり角かっこ内にあります。

    • FOREIGN KEY (category) REFERENCES categories (id)

    例

    CREATE TABLE yourtablename (id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL, date TEXT, FOREIGN KEY (category) REFERENCES categories (id));
    

    column-constraint が見つかる場合があります および table-constraint 使用の。

    日付 列名にすることができます。ただし、列名としてdateなどのSQLiteキーワードを使用しないことをお勧めします。




    1. utf8_general_ciとutf8_unicode_ciの違いは何ですか?

    2. Mysqlは2つのテーブルに挿入します

    3. SQLServer2017のトリガーイベントタイプの階層リスト

    4. MySQLの文字列からすべての英数字以外の数字を削除するにはどうすればよいですか?