A continuación se muestra un extracto del manual de SQLite discutir el comando ALTER TABLE (ver URL: SQLite Alter Table):
SQLite soporta un subconjunto limitado de ALTER TABLE. El comando ALTER TABLE en SQLite permite al usuario cambiar el nombre de una tabla o agregar una nueva columna a una tabla existente . No es posible cambiar el nombre de una columna, eliminar una columna o agregar o eliminar restricciones de una tabla .
Como indica el manual, no es posible modificar el tipo o las restricciones de una columna, como convertir NULL a NOT NULL. Sin embargo, hay un trabajo alrededor de
- copiar la tabla de edad a una tabla temporal,
- crear una nueva tabla definida como se desee, y
- copiar los datos de la tabla temporal a la nueva tabla.
Para dar crédito donde se debe crédito, lo aprendí de la discusión sobre el Issue # 1 del proyecto django-email-usernames de hakanw en bitbucket.org.
CREATE TABLE test_table(
id INTEGER,
salt TEXT NOT NULL UNIQUE,
step INT,
insert_date TIMESTAMP
);
ALTER TABLE test_table RENAME TO test_table_temp;
CREATE TABLE test_table(
id INTEGER PRIMARY KEY,
salt TEXT,
step INT,
insert_date TIMESTAMP
);
INSERT INTO test_table SELECT * FROM test_table_temp;
DROP TABLE test_table_temp;
Notas
- he usado el nombre de la tabla
test_table
desde SQLite generará un error si se intenta nombrar una tabla como table
.
- El comando
INSERT INTO
fallará si sus datos no se ajustan a las nuevas restricciones de la tabla. Por ejemplo, si el test_table
original contiene dos campos id
con el mismo número entero, recibirá un "SQL error: PRIMARY KEY must be unique
" cuando ejecute el comando "INSERT INTO test_table SELECT * FROM test_table_temp;
".
- Para todas las pruebas, que utiliza SQLite versión 3.4.0 como se incluye como parte de Python 2.6.2 corriendo en mi 13" Unibody MacBook con Mac OS X 10.5.7.
¿Necesita más información incluyendo otros índices, constrains, PKs ... Si usa MSSQL, haga "Script table as ..." -> "Create to" -> "New Query window", y pegue ese script aquí también. Entonces alguien lo ayudará a crear secuencias de comandos ALTER para el cambio. – van