2011-07-31 23 views

Respuesta

5

Si está utilizando ALTER TABLE con RENAME TO cambiar el nombre de una tabla, a continuación, tal como se describe en this page (a partir de los documentos sqlite) los índices seguirán funcionando:

El comando ALTER TABLE en SQLite permite la usuario para cambiar el nombre de una tabla [...] Si la tabla que se cambia de nombre tiene desencadenantes o índices, estos permanecen adjuntos a la tabla después de haber sido renombrada.

Pero tenga en cuenta que no hay cambio de nombre de columnas permitido. Este es uno de los SQL features not implemented by sqlite:

Solo se admiten las variantes RENAME TABLE y ADD COLUMN del comando ALTER TABLE. Se omiten otros tipos de operaciones ALTER TABLE, como DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT, etc.

Filas no tienen nombres (excepto en el sentido de tener una PK) así que no hay realmente una manera de cambiar el nombre de ellos.

+0

¿Hay alguna forma de copiar la información de una columna a otra y luego eliminar la primera columna? – joshim5

+0

Vea esta [otra pregunta de SO] (http://stackoverflow.com/questions/805363/how-do-i-rename-a-column-in-a-sqlite-database-table) sobre el cambio de nombre de las columnas –

+0

Estaba en realidad solo mirando a través de eso :). La primera respuesta se ve genial, pero ¿cómo debo lidiar con los índices? – joshim5

0

Sí, los viejos índices seguirá siendo funcional.

Tenga en cuenta que a sqlite no le importan los nombres de los índices. Inicialmente, cuando se crea un índice, generalmente reciben el nombre de la tabla y el campo, de modo que cuando cambie el nombre de la tabla, los índices seguirán teniendo el nombre de la tabla anterior. Esto puede causar problemas, cuando por ejemplo:

  • volcar la mesa
  • cambiar el nombre de la mesa de edad:

    sqlite3 "$DB" "PRAGMA busy_timeout=20000; ALTER TABLE '$TABLE' RENAME TO '$TABLE"_backup"'" 
    
  • volver a importar la tabla vertido

Esto provocará un error , que los índices ya existen.

Solución: Cambie el nombre de los índices o bórrelos en la tabla renombrada antes de volver a importar el original (consulte this answer).

Cuestiones relacionadas