English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Les contraintes PostgreSQL sont utilisées pour spécifier les règles des données dans une table.
Si des comportements de données en violation des contraintes existent, les comportements seront arrêtés par les contraintes.
Les contraintes peuvent être spécifiées lors de la création de la table (par le biais de l'instruction CREATE TABLE) ou après la création de la table (par le biais de l'instruction ALTER TABLE).
Les contraintes assurent l'exactitude et la fiabilité des données dans la base de données.
Les contraintes peuvent être de niveau de colonne ou de niveau de table. Les contraintes de niveau de colonne ne s'appliquent qu'aux colonnes, tandis que les contraintes de niveau de table sont appliquées à l'ensemble de la table.
Voici les contraintes couramment utilisées dans PostgreSQL.
NOT NULL:indique que une colonne ne peut pas stocker de valeurs NULL.
UNIQUE:s'assure que les valeurs d'une colonne sont uniques.
PRIMARY Key : une combinaison de NOT NULL et UNIQUE. Assure qu'une colonne (ou une combinaison de plusieurs colonnes) a une identité unique, ce qui aide à trouver plus facilement et plus rapidement un enregistrement spécifique dans une table.
FOREIGN Key : garantit l'intégrité référentielle des valeurs entre deux tables.
CHECK : garantit que les valeurs de la colonne répondent aux conditions spécifiées.
EXCLUSION : une contrainte exclusive, qui garantit que si deux lignes spécifiques d'une colonne ou d'une expression sont comparées à l'aide d'un opérateur spécifié, au moins un opérateur de comparaison retournera false ou une valeur vide.
Par défaut, une colonne peut enregistrer des valeurs NULL. Si vous ne souhaitez pas que某一列有 NULL 值,vous devez définir cette contrainte sur la colonne, indiquant que des valeurs NULL ne sont pas autorisées dans cette colonne.
NULL et sans données ne sont pas les mêmes, ils représentent des données inconnues.
Exemple
Ci-dessous est un exemple de création d'une nouvelle table appelée COMPANY1,ajouté 5 un champ, où trois ID, NAME, AGE sont configurés pour ne pas accepter de valeurs NULL :
CREATE TABLE COMPANY1( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(,50), SALARY REAL );
L'contrainte UNIQUE peut configurer une colonne en unique, évitant que la même valeur ne se répète dans la même colonne.
Exemple
Ci-dessous est un exemple de création d'une nouvelle table appelée COMPANY3,ajouté 5 un champ, où AGE est configuré comme UNIQUE, donc vous ne pouvez pas ajouter deux enregistrements avec le même âge :
CREATE TABLE COMPANY3( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL UNIQUE, ADDRESS CHAR(,50), SALARY REAL DEFAULT 50000.00 );
Lors de la conception de la base de données, PRIMARY KEY est très important.
La clé primaire (PRIMARY KEY) est l'identifiant unique de chaque enregistrement dans une table de données.
Il peut y avoir plusieurs colonnes pour définir UNIQUE, mais une table ne peut avoir qu'une seule colonne pour définir PRIMARY KEY.
Nous pouvons utiliser la clé principale pour référencer les lignes d'une table, ou créer des relations entre tables en définissant la clé principale comme clé étrangère d'une autre table.
La clé principale est une combinaison de contrainte non nulle et de contrainte unique.
Une table ne peut avoir qu'une seule clé principale, qui peut être composée d'un ou plusieurs champs. Lorsque plusieurs champs sont utilisés comme clé principale, ils sont appelés clé primaire composée.
Si une table définit une clé principale sur n'importe quel champ, il ne peut pas y avoir deux enregistrements avec la même valeur sur ces champs.
Exemple
Voici nous créons COMAPNY4 Table, où ID est la clé primaire :
CREATE TABLE COMPANY4( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(,50), SALARY REAL );
La contrainte de clé étrangère (clé étrangère) spécifie que les valeurs d'une colonne (ou un ensemble de colonnes) doivent correspondre aux valeurs apparaissant dans une ligne de l'autre table.
Généralement, une clé étrangère dans une table pointe vers une clé UNIQUE dans une autre table (contrainte unique), ce qui maintient l'intégrité référentielle entre deux tables liées.
Exemple
L'exemple suivant crée une table COMPANY6 Table, et a ajouté5Un champ :
CREATE TABLE COMPANY6( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(,50), SALARY REAL );
Voici un exemple de création d'une table DEPARTMENT1 Table, et ajoute 3 Un champ, EMP_ID est une clé étrangère, référençant la table COMPANY6 的 ID:
CREATE TABLE DEPARTMENT1( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT references COMPANY6(ID) );
Le contrôle CHECK assure que toutes les valeurs de la colonne satisfont une certaine condition, c'est-à-dire qu'il faut vérifier l'entrée d'un enregistrement. Si la valeur de la condition est false, l'enregistrement viole la contrainte et ne peut pas être inséré dans la table.
Exemple
Par exemple, voici un exemple de création d'une nouvelle table COMPANY5,增加了五列。在这里,我们为 SALARY 列添加 CHECK,所以工资不能为零:
CREATE TABLE COMPANY5( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(,50), SALARY REAL CHECK(SALARY > 0) );
L'contrôle d'exclusion assure que si l'opérateur spécifié est utilisé pour comparer deux lignes arbitraires sur une colonne ou une expression spécifiée, au moins l'un des opérateurs comparatifs retournera false ou null.
Exemple
L'exemple suivant crée une table COMPANY7 Ajouter une table, 5 un champ, et utilise une contrainte EXCLUDE.
CREATE TABLE COMPANY7( ID INT PRIMARY KEY NOT NULL, NAME TEXT, AGE INT, ADDRESS CHAR(,50), SALARY REAL, EXCLUDE USING gist (NAME WITH =, -- Si le nom est le même et l'âge est différent, l'insertion n'est pas autorisée, sinon l'insertion est autorisée AGE WITH <>) -- Le résultat de la comparaison est que si l'expression de la table entière retourne true, l'insertion n'est pas autorisée, sinon l'insertion est autorisée );
Ici, USING gist est un type d'index utilisé pour construire et exécuter.
Vous devez exécuter la commande CREATE EXTENSION btree_gist une fois pour chaque base de données, ce qui installera l'extension btree_gist, qui définit une contrainte EXCLUDE pour les types de données scalaires purs.
Puisque nous avons déjà forcé l'âge à être le même, regardons cela en insérant un enregistrement dans la table :
INSERT INTO COMPANY7 VALUES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY7 VALUES (2, 'Paul', 32, 'Texas', 20000.00 ); -- Le nom de cette donnée est le même que le premier, et l'âge est également le même que le premier, donc elle satisfait aux conditions d'insertion INSERT INTO COMPANY7 VALUES (3, 'Allen', 42, 'California', 20000.00 ); -- Cette donnée est identique à la donnée ci-dessus en nom, mais pas en âge, donc elle n'est pas autorisée à être insérée
Les deux premières COMPANY ajoutées avec succès7 dans la table, mais le troisième déclenche une erreur :
ERREUR : La valeur de clé dupliquée viole la contrainte unique "company7_pkey" DÉTAIL : Clé (id)=(3) déjà existe.
Pour supprimer une contrainte, il faut connaître le nom de la contrainte. Si vous connaissez le nom, il est facile de supprimer la contrainte. Si vous ne connaissez pas le nom, vous devez trouver le nom généré par le système, vous pouvez utiliser \d table_name pour trouver ces informations.
La syntaxe universelle est la suivante :
ALTER TABLE table_name DROP CONSTRAINT some_name;