Resumen :en este tutorial, aprenderá a usar SQLite ALTER TABLE
instrucción para cambiar la estructura de una tabla existente.
A diferencia del estándar SQL y otros sistemas de bases de datos, SQLite admite una funcionalidad muy limitada de ALTER TABLE
declaración.
Mediante el uso de un SQLite ALTER TABLE
instrucción, puede realizar dos acciones:
- Cambiar el nombre de una tabla.
- Añadir una nueva columna a una tabla.
- Cambiar el nombre de una columna (agregado admitido en la versión 3.20.0)
Usar SQLite ALTER TABLE para cambiar el nombre de una tabla
Para cambiar el nombre de una tabla, utilice el siguiente ALTER TABLE RENAME TO
declaración:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Estos son puntos importantes que debe saber antes de cambiar el nombre de una tabla:
- La
ALTER TABLE
solo cambia el nombre de una tabla dentro de una base de datos. No puede usarlo para mover la tabla entre las bases de datos adjuntas. - Los objetos de la base de datos, como índices y disparadores asociados con la tabla, se asociarán con la nueva tabla.
- Si se hace referencia a una tabla mediante vistas o declaraciones en disparadores, debe cambiar manualmente la definición de vistas y disparadores.
Tomemos un ejemplo de cambio de nombre de una tabla.
Primero, crea una tabla llamada devices
que tiene tres columnas:name,
model
, serial
; e inserte una nueva fila en los devices
mesa.
CREATE TABLE devices (
name TEXT NOT NULL,
model TEXT NOT NULL,
Serial INTEGER NOT NULL UNIQUE
);
INSERT INTO devices (name, model, serial)
VALUES('HP ZBook 17 G3 Mobile Workstation','ZBook','SN-2015');
Code language: SQL (Structured Query Language) (sql)
Pruébalo
En segundo lugar, use ALTER TABLE RENAME TO
instrucción para cambiar los devices
tabla a equipment
tabla de la siguiente manera:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Pruébalo
Tercero, consulta los datos del equipment
tabla para verificar el RENAME
operación.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Pruébalo
Usando SQLite ALTER TABLE para agregar una nueva columna a una tabla
Puede usar SQLite ALTER TABLE
instrucción para agregar una nueva columna a una tabla existente. En este escenario, SQLite agrega la nueva columna al final de la lista de columnas existente.
Lo siguiente ilustra la sintaxis de ALTER TABLE ADD COLUMN
declaración:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Hay algunas restricciones en la nueva columna:
- La nueva columna no puede tener un
UNIQUE
oPRIMARY KEY
restricción. - Si la nueva columna tiene un
NOT NULL
restricción, debe especificar un valor predeterminado para la columna que no seaNULL
valor. - La nueva columna no puede tener un valor predeterminado de
CURRENT_TIMESTAMP
,CURRENT_DATE
yCURRENT_TIME
, o una expresión. - Si la nueva columna es una clave externa y la verificación de restricciones de clave externa está habilitada, la nueva columna debe aceptar un valor predeterminado
NULL
.
Por ejemplo, puede agregar una nueva columna llamada location
al equipment
tabla:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Pruébalo
Usar SQLite ALTER TABLE para cambiar el nombre de una columna
SQLite agregó el soporte para cambiar el nombre de una columna usando ALTER TABLE RENAME COLUMN
declaración en la versión 3.20.0
A continuación se muestra la sintaxis de ALTER TABLE RENAME COLUMN
declaración:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
Para obtener más información sobre cómo cambiar el nombre de una columna, consulte el tutorial de cambio de nombre de la columna.
Usando SQLite ALTER TABLE para otras acciones
Si desea realizar otras acciones, por ejemplo, soltar una columna, utilice los siguientes pasos:
La siguiente secuencia de comandos ilustra los pasos anteriores:
-- disable foreign key constraint check
PRAGMA foreign_keys=off;
-- start a transaction
BEGIN TRANSACTION;
-- Here you can drop column
CREATE TABLE IF NOT EXISTS new_table(
column_definition,
...
);
-- copy data from the table to the new_table
INSERT INTO new_table(column_list)
SELECT column_list
FROM table;
-- drop the table
DROP TABLE table;
-- rename the new_table to the table
ALTER TABLE new_table RENAME TO table;
-- commit the transaction
COMMIT;
-- enable foreign key constraint check
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
SQLite ALTER TABLE DROP COLUMN
ejemplo
SQLite no es compatible con ALTER TABLE DROP COLUMN
declaración. Para soltar una columna, debe seguir los pasos anteriores.
El siguiente script crea dos tablas users
y favorites
e inserte datos en estas tablas:
CREATE TABLE users(
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL,
Phone TEXT NOT NULL
);
CREATE TABLE favorites(
UserId INTEGER,
PlaylistId INTEGER,
FOREIGN KEY(UserId) REFERENCES users(UserId),
FOREIGN KEY(PlaylistId) REFERENCES playlists(PlaylistId)
);
INSERT INTO users(FirstName, LastName, Email, Phone)
VALUES('John','Doe','[email protected]','408-234-3456');
INSERT INTO favorites(UserId, PlaylistId)
VALUES(1,1);
Code language: SQL (Structured Query Language) (sql)
La siguiente declaración devuelve datos de los users
tabla:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Y la siguiente declaración devuelve los datos de los favorites
tabla:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Supongamos que desea eliminar la columna phone
de los users
mesa.
Primero, deshabilite la verificación de restricción de clave externa:
PRAGMA foreign_keys=off;
Segundo, inicie una nueva transacción:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Tercero, cree una nueva tabla para almacenar datos de los users
mesa excepto por el phone
columna:
CREATE TABLE IF NOT EXISTS persons (
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
Cuarto, copie los datos de los users
a persons
tabla:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Quinto, suelte los users
tabla:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Sexto, cambie el nombre de las persons
tabla a users
tabla:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Séptimo, confirme la transacción:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Octavo, habilite la verificación de restricción de clave externa:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Aquí están los users
mesa después de soltar el phone
columna:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Resumen
- Utilice la
ALTER TABLE
instrucción para modificar la estructura de una tabla existente. - Utilice
ALTER TABLE table_name RENAME TO new_name
instrucción para cambiar el nombre de una tabla. - Utilice
ALTER TABLE table_name ADD COLUMN column_definition
instrucción para agregar una columna a una tabla. - Usar
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
para cambiar el nombre de una columna.