2013-08-22 10 views
26

Sto creando una tabella con riferimenti a chiave esterna. Mi sto chiedendo la sintassi richiesta. Per lo più ho visto il seguente (da http://www.sqlite.org/foreignkeys.html#fk_basics):Sintassi SQLite per la creazione di una tabella con chiave esterna

CREATE TABLE artist( 
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 
CREATE TABLE track( 
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER, 
    FOREIGN KEY(trackartist) REFERENCES artist(artistid) 
); 

Tuttavia, dallo stesso sito (http://www.sqlite.org/foreignkeys.html#fk_actions) vedo questo:

CREATE TABLE artist( 
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 
CREATE TABLE track( 
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE 
); 

Quest'ultimo sintassi è un po 'più conciso, ma io voglio sapere se il risultato è in qualche modo diverso (a parte lo ON UPDATE CASCADE, che naturalmente ha un effetto, l'ho incluso solo perché ho copiato il codice esattamente dal sito di riferimento, e perché non so che la sintassi sopra non lo fa si applicano solo quando si effettua tale specifica). Sto lavorando in Android, nel caso ciò che conta.

risposta

18

Vedere syntax diagrams.

La prima sintassi è un vincolo tavolo, mentre la seconda sintassi è un vincolo colonna. In questi esempi, si comportano allo stesso modo.

È necessario un vincolo di tabella per una chiave su più colonne (in cui non si dispone di una singola colonna a cui è possibile collegarla).

18

Questa risposta potrebbe non essere correlata alla tua ma ho pensato che dovrebbe essere utile per gli altri che stanno lavorando con database Android.
IN SQLite I vincoli di chiave esterna sono disabilitati per impostazione predefinita (per compatibilità con le versioni precedenti). Devi abilitarlo esplicitamente usando

PRAGMA foreign_keys = 1 

dopo aver stabilito la connessione con il database. Ecco il link ai documenti ufficiali che lo spiega in modo più approfondito. http://sqlite.org/foreignkeys.html Passare all'abilitazione del supporto per chiave esterna nel collegamento sopra.

+0

Hi War_Hero, sto ricevendo la chiave esterna come null. Puoi guardarlo per favore.Queste sono le mie 2 tabelle Tabella 1 - stringa finale DATABASE_CREATE_TABLE = "Crea tabella se non esiste scannerValuess (id intero, partName testo null, costo testo null, foreign key (id) reference scannerUserValuess (userid)) "; Tabella 2 - Stringa finale DATABASE_CREATE_TABLE_USER = "Crea tabella se non esiste scannerUserValuess (ID utente intero interstizazione chiave primaria, nome testo non null, testo mobile non nullo, testo indirizzo non nullo, testo data non null)"; Per favore aiutami al più presto. Grazie in anticipo. – Naveen

Problemi correlati