2013-06-03 13 views
6

Ho la seguente tabella:Modificare la chiave primaria di una tabella in SQLite

[id,lang,data] 

Se la chiave primaria è id

voglio cambiare la chiave primaria per id,lang senza perdere il contenuto del tavolo. Qual è la query devo scappare cambiarlo

Grazie

+3

See: http://stackoverflow.com/questions/1884787/how-do-i-drop-a-constraint-from -a-sqlite-3-6-21-table – GamerJosh

risposta

21

Come per il commento di @GarnerJosh, non è possibile eseguire un singolo comando di cambiarlo - SQLite non consente che cambiano strutture delle tabelle esistenti. Invece, creare una nuova tabella con una chiave primaria composta e copiare i dati su:

CREATE TABLE my_table_copy( 
    id INTEGER, 
    lang INTEGER, 
    data TEXT, 
    PRIMARY KEY (id, lang) 
); 
INSERT INTO my_table_copy (id, lang, data) 
    SELECT id, lang, data FROM my_table; 
DROP TABLE my_table; 
ALTER TABLE my_table_copy RENAME TO my_table; 
+0

Bella risposta, in questo caso assicurati che tu non stia chiamando onCreate (db) di nuovo da onUpgrade(), Se lo fai allora l'applicazione tenterà nuovamente di creare la tua tabella e causerà sqliteException, la tabella già esce. quindi per evitare questo, basta rilasciare e creare quelle tabelle che si desidera modificare. Grazie PinnyM e GamerJosh –

+0

C'è una informazione dettagliata su questo metodo nella documentazione Sqlite: https://www.sqlite.org/lang_altertable.html "Fare altri tipi di modifiche allo schema della tabella" – Matthieu

Problemi correlati