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

SQLite ALTERAR TABLA

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:

  1. Cambiar el nombre de una tabla.
  2. Añadir una nueva columna a una tabla.
  3. 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 o PRIMARY KEY restricción.
  • Si la nueva columna tiene un NOT NULL restricción, debe especificar un valor predeterminado para la columna que no sea NULL valor.
  • La nueva columna no puede tener un valor predeterminado de CURRENT_TIMESTAMP , CURRENT_DATE y CURRENT_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.