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

Agregar una columna a una tabla existente en SQLite

En SQLite, puede usar ALTER TABLE instrucción para agregar una columna a una tabla existente.

Esta es en realidad una de las pocas cosas que puede hacer con ALTER TABLE declaración en SQLite. Lo único que puedes hacer con ALTER TABLE La declaración en SQLite es cambiar el nombre de una tabla, cambiar el nombre de una columna y agregar una nueva columna a una tabla existente.

Ejemplo 1

Imagina que tenemos la siguiente tabla:

CREATE TABLE Cats( 
    CatId INTEGER PRIMARY KEY, 
    CatName
);

Y ahora queremos agregar una columna llamada DOB . Podríamos hacerlo usando el siguiente código:

ALTER TABLE Cats ADD COLUMN DOB;

Es tan simple como eso.

Restricciones

También puede proporcionar otras especificaciones a la definición, como restricciones, etc., pero existen algunas restricciones.

En particular:

  • La nueva columna no puede tener una PRIMARY KEY o UNIQUE restricción.
  • La nueva columna no puede tener 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 .
  • Si la nueva columna es una columna generada, no se puede STORED columna. Puede ser un VIRTUAL aunque la columna.

Ejemplo 2

Aquí hay otro ejemplo, esta vez agrego algunas especificaciones más a la definición de la nueva columna:

CREATE TABLE Dogs( 
    DogId INTEGER PRIMARY KEY, 
    DogName
);

Y ahora queremos agregar una columna llamada DOB . Podríamos hacerlo usando el siguiente código:

ALTER TABLE Dogs 
ADD COLUMN Score NOT NULL DEFAULT 0;

Revise las Alteraciones

Hay varias formas de verificar la estructura de una tabla en SQLite.

Una forma es usar PRAGMA table_info() declaración.

PRAGMA table_info(Dogs);

Resultado:

cid  name     type     notnull     dflt_value  pk
---  -------  -------  ----------  ----------  --
0    DogId    INTEGER  0                       1 
1    DogName           0                       0 
2    Score             1           0           0 

Podemos ver la nueva columna y podemos ver que tiene un NOT NULL restricción, y que su valor predeterminado es 0 .