Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQLite in Android:Foreign Keys und erwartet

Ihr Problem ist, dass Sie column_constraint verwechselt haben Syntax mit table_constraint Syntax (d. h. letzteres kodiert, wo ersteres verwendet werden sollte ).

Sie können das Problem beheben, indem Sie

verwenden

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");

Wie unten erklärt, ebenso wie die alternative Syntax.

Das heißt, die Spalteneinschränkungssyntax beginnt mit den REFERENCES .... und ist Teil der Spaltendefinition (d. h. der Spaltenname ist implizit), während die table_constraint-Syntax mit FORIEGN KEY(column_name) REFERENCES ... beginnt und folgt den Spaltendefinitionen

Sie könnten also entweder:-

Column_constraint-Syntax

  • Als Teil einer Spaltendefinition

  • category INTEGER NOT NULL REFERENCES categories (id)

zB

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)

oder

Table_constraint-Syntax

  • nachdem die Spalten definiert wurden, aber immer noch innerhalb der Spaltendefinition, d.h. immer noch innerhalb der Klammern.

  • FOREIGN KEY (category) REFERENCES categories (id)

zB

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));

Sie können column-constraint finden und table-constraint Verwendung.

Datum kann ein Spaltenname sein. Ich würde jedoch vorschlagen, dass es ratsam ist, keine SQLite-Schlüsselwörter wie Datum als Spaltennamen zu verwenden.