SQLite
 sql >> Base de données >  >> RDS >> SQLite

Clé primaire SQLite

Résumé :dans ce tutoriel, vous apprendrez à utiliser SQLite PRIMARY KEY contrainte pour définir une clé primaire pour une table.

Introduction à la clé primaire SQLite

Une clé primaire est une colonne ou un groupe de colonnes utilisé pour identifier l'unicité des lignes d'une table. Chaque table a une et une seule clé primaire.

SQLite vous permet de définir la clé primaire de deux manières :

Tout d'abord, si la clé primaire n'a qu'une seule colonne, vous utilisez la PRIMARY KEY contrainte de colonne pour définir la clé primaire comme suit :

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

Deuxièmement, dans le cas où la clé primaire se compose de deux colonnes ou plus, vous utilisez la PRIMARY KEY contrainte de table pour définir le primaire comme indiqué dans l'instruction suivante.

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 standard SQL, la colonne de clé primaire ne doit pas contenir NULL valeurs. Cela signifie que la colonne de clé primaire a un NOT NULL implicite contrainte.

Cependant, pour rendre la version actuelle de SQLite compatible avec la version antérieure, SQLite permet à la colonne de clé primaire de contenir NULL valeurs.

Clé primaire SQLite et table rowid

Lorsque vous créez une table sans spécifier le WITHOUT ROWID option, SQLite ajoute une colonne implicite appelée rowid qui stocke un entier signé 64 bits. Le rowid colonne est une clé qui identifie de manière unique les lignes de la table. Tables qui ont rowid les colonnes sont appelées rowid tableaux.

Si une table a la clé primaire qui se compose d'une colonne et que cette colonne est définie comme INTEGER alors cette colonne de clé primaire devient un alias pour le rowid colonne.

Notez que si vous affectez un autre type entier tel que BIGINT et UNSIGNED INT à la colonne de clé primaire, cette colonne ne sera pas un alias pour le rowid colonne.

Parce que le rowid table organise ses données sous la forme d'un arbre B, interrogeant et triant les données d'un rowid le tableau est très rapide. C'est plus rapide que d'utiliser une clé primaire qui n'est pas un alias du rowid .

Une autre remarque importante est que si vous déclarez une colonne avec le INTEGER type et PRIMARY KEY DESC clause, cette colonne ne deviendra pas un alias pour le rowid colonne :

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

Création d'exemples de clé primaire SQLite

L'instruction suivante crée une table nommée countries qui a country_id colonne comme clé primaire.

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

Essayez-le

Parce que la clé primaire des countries table a une seule colonne, nous avons défini la clé primaire en utilisant PRIMARY KEY contrainte de colonne.

Il est possible d'utiliser la PRIMARY KEY contrainte de table pour définir la clé primaire composée d'une colonne, comme indiqué dans l'instruction suivante :

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

Essayez-le

Cependant, pour les tables dont les clés primaires sont constituées de plusieurs colonnes, vous devez utiliser PRIMARY KEY contrainte de table pour définir les clés primaires.

L'instruction suivante crée le country_languages table dont la clé primaire est composée de deux colonnes.

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)

Essayez-le

Ajout d'un exemple de clé primaire SQLite

Contrairement à d'autres systèmes de base de données, par exemple MySQL et PostgreSQL, vous ne pouvez pas utiliser ALTER TABLE pour ajouter une clé primaire à une table existante.

Vous devez suivre ces étapes pour contourner la limitation :

  1. Tout d'abord, désactivez la vérification de la contrainte de clé étrangère.
  2. Ensuite, renommez la table avec un autre nom de table (old_table)
  3. Ensuite, créez une nouvelle table (table) avec la structure exacte de la table que vous avez renommée.
  4. Après cela, copiez les données de l'ancienne_table vers la table.
  5. Enfin, activez la vérification des contraintes de clé étrangère

Voir les déclarations suivantes :

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)

Essayez-le

Le BEGIN TRANSACTION démarre une nouvelle transaction. Il garantit que toutes les instructions suivantes s'exécutent avec succès ou que rien ne s'exécute du tout.

Le COMMIT instruction valide toutes les instructions.

Créons un nom de table cities sans clé primaire.

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)

Essayez-le

Afin d'ajouter la clé primaire aux cities table, vous effectuez les étapes suivantes :

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)

Essayez-le

Si vous utilisez l'outil d'interface graphique SQLite, vous pouvez utiliser l'instruction suivante pour afficher les informations de la table.

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

Essayez-le

Dans ce tutoriel, vous avez appris à utiliser la SQLite PRIMARY KEY contrainte pour définir la clé primaire d'une table.