sql >> Database teknologi >  >> RDS >> Mysql

SQLite i Android:Foreign Keys og forventes

Dit problem er, at du har blandet column_constraint sammen syntaks med table_constraint syntaks (dvs. kodet sidstnævnte, hvor førstnævnte skal bruges ).

Du kan løse problemet ved at bruge

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

Som forklaret nedenfor, ligesom den alternative syntaks.

Det er den kolonne begrænsning syntaks starter med REFERENCES .... og er en del af kolonnedefinitionen (dvs. kolonnenavnet er implicit), mens table_constraint-syntaksen starter med FORIEGN KEY(column_name) REFERENCES ... og følger kolonnedefinitionerne

Så du kunne have enten :-

Column_constraint-syntaks

  • Som en del af en kolonnedefinition

  • category INTEGER NOT NULL REFERENCES categories (id)

f.eks.

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)

eller

Table_constraint-syntaks

  • efter at kolonnerne er blevet defineret, men stadig inden for kolonnedefinitionen, dvs. stadig inden for parentes.

  • FOREIGN KEY (category) REFERENCES categories (id)

f.eks.

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

Du kan finde column-constraint og table-constraint til brug.

dato kan være et kolonnenavn. Jeg vil dog foreslå, at det er klogt ikke at bruge noget SQLite-nøgleord, såsom dato, som et kolonnenavn.




  1. Hvad er null-tegnet bogstaveligt i TSQL?

  2. Sådan formateres dato og klokkeslæt i SQL Server

  3. LINQ til SQL flere tabeller venstre ydre joinforbindelse

  4. Perl DBI - kør SQL Script med flere sætninger