Domanda

C'è un modo semplice per modificare una tabella nelle versioni recenti SQLite in modo che corrisponda uno schema predefinito?

Schema:

war_id INTEGER NOT NULL, 
clanname VARCHAR(64), 
clanhomepage VARCHAR(128), 
date DATETIME, 
server VARCHAR(64), 
warmode_id INTEGER, 
squad_id INTEGER, 
notes TEXT, clantag String(16), 
PRIMARY KEY (war_id), 
FOREIGN KEY(warmode_id) REFERENCES warmodes (warmode_id), 
FOREIGN KEY(squad_id) REFERENCES squads (squad_id), 
FOREIGN KEY(orgamember_id) REFERENCES users (user_id)

Ora voglio inserire clantag VARCHAR (16) dopo clanname quindi è coerente con altre configurazioni.

Non mi dispiace l'esportazione, l'ammaraggio, ricreando, ma mi chiedo se c'è la possibilità di farlo senza che, dato altri database SQL in grado di gestire che ...

È stato utile?

Soluzione

SQlite supporta l'aggiunta di colonne, come mostrato qui . L'unica restrizione si faccia è che la colonna sarà alla fine del tavolo, ma per ordine normale uso colonna non dovrebbe essere un problema. Una soluzione alternativa è quella di creare una nuova tabella con la nuova definizione, inserire tutti i dati in esso, eliminare la vecchia tabella e rinominare la nuova tabella, in questo modo:

BEGIN TRANSACTION;
CREATE TABLE War_TMP( 
    war_id INTEGER NOT NULL, 
    clanname VARCHAR(64), 
    clantag VARCHAR(16),
    clanhomepage VARCHAR(128), 
    date DATETIME, 
    server VARCHAR(64), 
    warmode_id INTEGER, 
    squad_id INTEGER, 
    notes TEXT, 
    PRIMARY KEY (war_id), 
    FOREIGN KEY(warmode_id) REFERENCES warmodes (warmode_id), 
    FOREIGN KEY(squad_id) REFERENCES squads (squad_id), 
    FOREIGN KEY(orgamember_id) REFERENCES users (user_id)
);

INSERT INTO War_TMP() SELECT war_id, clanname, "", clanhomepage,date,server,warmode_id,squad_id,notes FROM War;
DROP TABLE War;

ALTER TABLE War_TMP RENAME TO War;

COMMIT;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top