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

Clave principal de SQLite

Resumen :en este tutorial, aprenderá a usar SQLite PRIMARY KEY restricción para definir una clave principal para una tabla.

Introducción a la clave principal de SQLite

Una clave principal es una columna o grupo de columnas que se utiliza para identificar la unicidad de las filas de una tabla. Cada tabla tiene una y solo una clave principal.

SQLite le permite definir la clave principal de dos maneras:

Primero, si la clave principal tiene solo una columna, usa la PRIMARY KEY restricción de columna para definir la clave principal de la siguiente manera:

CREATE TABLE table_name(
   column_1 INTEGER NOT NULL PRIMARY KEY,
   ...
);Code language: PHP (php)

En segundo lugar, en caso de que la clave principal consista en dos o más columnas, utilice la PRIMARY KEY restricción de tabla para definir el primario como se muestra en la siguiente declaración.

CREATE TABLE table_name(
   column_1 INTEGER NOT NULL,
   column_2 INTEGER NOT NULL,
   ...
   PRIMARY KEY(column_1,column_2,...)
);Code language: SQL (Structured Query Language) (sql)

En el estándar SQL, la columna de clave principal no debe contener NULL valores. Significa que la columna de clave principal tiene un implícito NOT NULL restricción.

Sin embargo, para que la versión actual de SQLite sea compatible con la versión anterior, SQLite permite que la columna de clave principal contenga NULL valores.

Clave principal de SQLite y tabla de ID de fila

Cuando crea una tabla sin especificar el WITHOUT ROWID opción, SQLite agrega una columna implícita llamada rowid que almacena enteros con signo de 64 bits. El rowid columna es una clave que identifica de forma única las filas de la tabla. Tablas que tienen rowid las columnas se llaman rowid mesas.

Si una tabla tiene la clave principal que consta de una columna, y esa columna se define como INTEGER entonces esta columna de clave principal se convierte en un alias para el rowid columna.

Tenga en cuenta que si asigna otro tipo de entero como BIGINT y UNSIGNED INT a la columna de clave principal, esta columna no será un alias para el rowid columna.

Porque el rowid tabla organiza sus datos como un árbol B, consultando y ordenando datos de un rowid mesa son muy rápidos. Es más rápido que usar una clave principal que no sea un alias de rowid .

Otra nota importante es que si declara una columna con el INTEGER tipo y PRIMARY KEY DESC cláusula, esta columna no se convertirá en un alias para el rowid columna:

CREATE TABLE table(
   pk INTEGER PRIMARY KEY DESC,
   ...
);Code language: SQL (Structured Query Language) (sql)

Creación de ejemplos de clave principal de SQLite

La siguiente declaración crea una tabla llamada countries que tiene country_id columna como clave principal.

CREATE TABLE countries (
   country_id INTEGER PRIMARY KEY,
   name TEXT NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Pruébalo

Porque la clave principal de los countries la tabla tiene solo una columna, definimos la clave principal usando PRIMARY KEY restricción de columna.

Es posible usar la PRIMARY KEY restricción de tabla para definir la clave principal que consta de una columna como se muestra en la siguiente declaración:

CREATE TABLE languages (
   language_id INTEGER,
   name TEXT NOT NULL,
   PRIMARY KEY (language_id)
);Code language: SQL (Structured Query Language) (sql)

Pruébalo

Sin embargo, para las tablas en las que las claves principales constan de más de una columna, debe usar PRIMARY KEY restricción de tabla para definir claves primarias.

La siguiente declaración crea el country_languages tabla cuya clave principal consta de dos columnas.

CREATE TABLE country_languages (
	country_id INTEGER NOT NULL,
	language_id INTEGER NOT NULL,
	PRIMARY KEY (country_id, language_id),
	FOREIGN KEY (country_id) REFERENCES countries (country_id) 
            ON DELETE CASCADE ON UPDATE NO ACTION,
	FOREIGN KEY (language_id) REFERENCES languages (language_id) 
            ON DELETE CASCADE ON UPDATE NO ACTION
);Code language: PHP (php)

Pruébalo

Ejemplo de adición de clave principal de SQLite

A diferencia de otros sistemas de bases de datos, por ejemplo, MySQL y PostgreSQL, no puede usar ALTER TABLE instrucción para agregar una clave principal a una tabla existente.

Debe seguir estos pasos para evitar la limitación:

  1. Primero, desactive la verificación constante de clave externa.
  2. A continuación, cambie el nombre de la tabla a otro nombre de tabla (old_table)
  3. Luego, cree una nueva tabla (table) con la estructura exacta de la tabla que le han renombrado.
  4. Después de eso, copie los datos de old_table a la tabla.
  5. Finalmente, active la verificación de restricción de clave externa

Consulte las siguientes declaraciones:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE table RENAME TO old_table;

-- define the primary key constraint here
CREATE TABLE table ( ... );

INSERT INTO table SELECT * FROM old_table;

COMMIT;

PRAGMA foreign_keys=on;Code language: SQL (Structured Query Language) (sql)

Pruébalo

El BEGIN TRANSACTION inicia una nueva transacción. Garantiza que todas las sentencias subsiguientes se ejecuten correctamente o que no se ejecute nada en absoluto.

El COMMIT declaración confirma todas las declaraciones.

Vamos a crear un nombre de tabla cities sin una clave principal.

CREATE TABLE cities (
   id INTEGER NOT NULL,
   name text NOT NULL
);

INSERT INTO cities (id, name)
VALUES(1, 'San Jose');Code language: SQL (Structured Query Language) (sql)

Pruébalo

Para agregar la clave principal a las cities tabla, realiza los siguientes pasos:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE cities RENAME TO old_cities;

CREATE TABLE cities (
   id INTEGER NOT NULL PRIMARY KEY,
   name TEXT NOT NULL
);

INSERT INTO cities 
SELECT * FROM old_cities;

DROP TABLE old_cities;

COMMIT;

PRAGMA foreign_keys=on;Code language: SQL (Structured Query Language) (sql)

Pruébalo

Si usa la herramienta SQLite GUI, puede usar la siguiente declaración para mostrar la información de la tabla.

PRAGMA table_info([cities]);Code language: SQL (Structured Query Language) (sql)

Pruébalo

En este tutorial, ha aprendido a usar SQLite PRIMARY KEY restricción para definir la clave principal de una tabla.