SQLite admite un subconjunto limitado del estándar SQL ALTER TABLE
declaración.
En SQLite, la ALTER TABLE
El comando permite al usuario cambiar el nombre de una tabla o agregar una nueva columna a una tabla existente.
Agregar una columna
El ADD COLUMN
La sintaxis se utiliza para agregar una nueva columna a una tabla existente.
Agreguemos una columna a los Artistas tabla:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
Y luego verifique la tabla con .schema
comando:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Las siguientes restricciones se aplican cuando se usa ADD COLUMN
sintaxis en SQLite:
- La columna puede no tener una
PRIMARY KEY
oUNIQUE
restricción. - Es posible que la columna no tenga un valor predeterminado de
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, o una expresión entre paréntesis. - Si un
NOT NULL
se especifica la restricción, entonces la columna debe tener un valor predeterminado que no seaNULL
. - Si las restricciones de clave externa están habilitadas y una columna con
REFERENCES
se agrega la cláusula, la columna debe tener un valor predeterminado de NULL .
Cambiar el nombre de una tabla
El RENAME TO
sintaxis le permite cambiar el nombre de una tabla.
Cambiemos el nombre de una de nuestras tablas:
ALTER TABLE Albums RENAME TO Albums1;
Y compruébalo con un .tables
comando:
sqlite> .tables Albums1 Artists
Ahora, cualquier otra operación deberá usar el nuevo nombre de la tabla. Entonces podemos seleccionar datos como este:
SELECT AlbumName, Year FROM Artists AS a INNER JOIN Albums1 AS r ON a.ArtistId = r.ArtistId WHERE a.ArtistName = 'Joe Satriani';
AlbumName Year -------------------- -------------------------------------------------- Surfing with the Ali 1987 Flying in a Blue Dre 1989 Black Swans and Worm 2010
Actualización o eliminación de columnas
SQLite no admite cláusulas como DROP COLUMN
, ALTER COLUMN
y ADD CONSTRAINT
, que forman parte del estándar SQL.
Sin embargo, hay otras formas de hacer estas cosas con SQLite.
Alterar una columna
Digamos que queremos cambiar el nombre del
Año
columna a
ReleaseDate
. Además, queremos eliminar el NOT NULL
restricción.
Para hacer esto, puede crear una nueva tabla (con la nueva definición de columna), completar la tabla con los datos de la tabla anterior y luego, una vez completada, eliminar la tabla anterior y cambiar el nombre de la nueva para que refleje el nombre original.
Crear la nueva tabla
Primero, cree la nueva tabla (observe ReleaseDate
en lugar de Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Así que ahora tenemos las siguientes tablas en nuestra base de datos:
sqlite> .tables Albums Albums1 Artists
Insertar datos
Luego inserte los datos de la tabla anterior.
Usa un INSERT
instrucción que selecciona datos de la tabla anterior y los inserta en la nueva tabla. Así:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Verifique que los datos se insertaron en la nueva tabla:
sqlite> SELECT * FROM Albums; AlbumId AlbumName ReleaseDate ArtistId -------- ------------------------------- ----------- ---------- 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Alien 1987 1 4 Heavy as a Really Heavy Thing 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of Cheese 1991 13 10 Flying in a Blue Dream 1989 1 11 Black Swans and Wormhole Wizard 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
Deja la mesa vieja
Ahora que la nueva tabla se creó y se completó con los datos, tenemos la opción de eliminar la tabla anterior, modificarla o dejarla como está.
Dejémoslo por ahora, lo eliminaremos más tarde.
Soltar una columna
Para soltar una columna, puede crear una tabla desde un SELECT
declaración. En el SELECT
declaración, omita la/s columna/s que desea descartar:SQLite creará solo aquellas columnas que están incluidas en SELECT
declaración.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
Y luego verifique que los datos se hayan insertado correctamente en la nueva tabla:
sqlite> select * from Albums2; AlbumId AlbumName ArtistId -------- ------------------------------- ---------- 1 Killers 7 2 Powerslave 7 3 Surfing with the Alien 1 4 Heavy as a Really Heavy Thing 11 5 Yummy Yummy 17 6 Out of the Loop 6 7 Suck on This 13 8 Pork Soda 13 9 Sailing the Seas of Cheese 13 10 Flying in a Blue Dream 1 11 Black Swans and Wormhole Wizard 1 12 Somewhere in Time 7 13 Big Red Car 17
Así que ahora tenemos las siguientes tablas en nuestra base de datos:
sqlite> .tables Albums Albums1 Albums2 Artists