sql >> Base de Datos >  >> RDS >> SQLite

SQLite - Modificar una tabla

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 o UNIQUE 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 sea NULL .
  • 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