2011-02-04 11 views
6

En las Preguntas frecuentes sobre SQLite [1] se menciona que SQLite no tiene soporte ALTER TABLE completo. En una pregunta anterior sobre StackOverflow [2] se menciona un truco para lograr modificaciones en la tabla.Actualizar referencias de claves foráneas al hacer el truco alterite de SQLite

Lo que me gustaría saber es cómo mantener las referencias FOREIGN KEY ya que se mueven a la tabla renombrada que se elimina posteriormente. ¿Debería hacer el mismo truco con todas y cada una de las tablas que tienen una relación de clave externa con la tabla real que estoy modificando?

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

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

Respuesta

5

Sí, tendrá que hacer lo mismo "truco". Cuando cambia el nombre de la tabla a la que se hace referencia, las restricciones de clave externa aún se refieren a ella bajo su nuevo nombre. Debido a que SQLite no es compatible con "DROP CONSTRAINT", también deberá reconstruir las tablas de referencia con las restricciones de clave externa corregidas.

De hecho, no podrá abandonar la tabla anterior hasta que corrija las referencias de la clave externa. Siempre y cuando PRAGMA foreign_keys=ON;, SQLite3 no le permitirá descartar una tabla que todavía tenga claves foráneas que la referencian.

3

Con las versiones actuales de las restricciones de referencia de SQLite en otras tablas no se vuelven a escribir cuando el manejo de la clave externa se ha desactivado usando PRAGMA foreign_keys=OFF. No se puede decir si ese comportamiento fue diferente en 2011.

Cuestiones relacionadas