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:
- Primero, desactive la verificación constante de clave externa.
- A continuación, cambie el nombre de la tabla a otro nombre de tabla (old_table)
- Luego, cree una nueva tabla (table) con la estructura exacta de la tabla que le han renombrado.
- Después de eso, copie los datos de old_table a la tabla.
- 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.