sql >> Databáze >  >> RDS >> Mysql

SQLite v Androidu:očekávané cizí klíče a

Váš problém je, že jste si spletli column_constraint syntaxe s table_constraint syntaxe (tj. zakódovaná druhá, kde by měla být použita první ).

Problém můžete vyřešit pomocí

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

Jak je vysvětleno níže, stejně jako alternativní syntaxe.

To znamená, že syntaxe omezení sloupce začíná REFERENCES .... a je součástí definice sloupce (tj. název sloupce je implicitní), zatímco syntaxe table_constraint začíná FORIEGN KEY(column_name) REFERENCES ... a řídí se definicemi sloupců

Takže můžete mít buď :-

Syntaxe omezení sloupců

  • Jako součást definice sloupce

  • category INTEGER NOT NULL REFERENCES categories (id)

např.

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)

nebo

Syntaxe omezení tabulky

  • poté, co byly sloupce definovány, ale stále v rámci definice sloupce, tj. stále v závorkách.

  • FOREIGN KEY (category) REFERENCES categories (id)

např.

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

Můžete najít column-constraint a table-constraint použití.

datum může být název sloupce. Navrhoval bych však, že je rozumné nepoužívat žádné klíčové slovo SQLite, jako je datum, jako název sloupce.




  1. MySql. Jak používat Self Join

  2. VYBERTE a uveďte děti a rodiče

  3. Aktualizovat časové razítko při aktualizaci řádku v PostgreSQL

  4. Získejte počty záznamů pro všechny tabulky v databázi MySQL