2011-02-04 5 views
6

Nel SQLite FAQ [1] si è detto che SQLite non ha il supporto completo ALTER TABLE. In una domanda precedente su StackOverflow [2] viene menzionato un trucco per eseguire le modifiche alla tabella.aggiornare i riferimenti di chiave esterna quando si fa lo SQLite ALTER TABLE trucco

Quello che vorrei sapere è come mantenere i riferimenti FOREIGN KEY in quanto questi vengono spostati al tavolo rinominato che viene successivamente cancellato. Devo fare lo stesso trucco con ogni tavolo che ha una relazione di chiave esterna con la tabella effettiva sto modificherò?

[1] http://www.sqlite.org/lang_altertable.html

[2] How do I rename a column in a SQLite database table?

risposta

5

Sì, avrete bisogno di fare lo stesso "trucco". Quando si rinomina la tabella di riferimento, i vincoli di chiave esterna si riferiscono ancora ad esso con il suo nuovo nome. Dal momento che SQLite non supporta "DROP costrizione", si dovrà ricostruire le tabelle di riferimento con i vincoli di chiave esterna corretti, anche.

In realtà, non sarà in grado di abbandonare il vecchio tavolo fino a correggere i riferimenti chiave esterna. Finché PRAGMA foreign_keys=ON;, SQLite3 non vi lascerà cadere una tabella che ha ancora le chiavi esterne riferimento a esso.

3

Con le versioni correnti dei vincoli di riferimento SQLite in altre tabelle non vengono riscritte quando la gestione delle chiavi esterne è stata disabilitata utilizzando PRAGMA foreign_keys=OFF.

Impossibile dire se questo comportamento era diverso nel 2011.