Elles permettent d'implémenter les règles de gestion. Deux types de contraintes : contraintes de colonnes et contraintes de table.

Contraintes de colonne

Contraintes de valeur

Elles s'assurent qu'une colonne aura toujours une valeur en accord avec une règle fixée.
CREATE TABLE article (…, qtestock NUMBER(3) CONSTRAINT ck_qtestock CHECK (qtestock > 0))

La contrainte nommée ck_qtestock vérifie que la colonne contiendra toujours une valeur > 0. Elle sera vérifiée systématiquement sur un INSERT ou un UPDATE.

Bonne pratique : créer les contraintes de valeur dans le CREATE TABLE. La contrainte CHECK peut porter sur tout type d'expression valide : CHECK (etat in ('ACTIF', 'INACTIF')).

Si la contrainte CHECK utilise deux colonnes, elle doit être sur une ligne à part, exemple :
CREATE TABLE article (
  ...,
   prixmin NUMBER(11,2),
   prixmax NUMBER(11,2),
   CONSTRAINT ck_prix CHECK (prixmax > prixmin),
   ...
)

Contrainte de nature

Voir la contrainte de PRIMARY KEY dans Création table. Une PRIMARY KEY peut porter sur plusieurs colonnes :
CREATE TABLE ligne (
   id_cde NUMBER(4) NOT NULL,
   id_article NUMBER(4) NOT NULL,
   CONSTRAINT pk_ligne PRIMARY KEY (id_cde, id_article)
)

Pour s'assurer que les valeurs d'une colonne seront uniques sans être une clé primaire :
CREATE TABLE personne (..., email VARCHAR2(100) CONSTRAINT u_email UNIQUE (email))

Contraintes de table

Ce sont les contraintes d'intégrité référentielles qui assurent qu'une clé étrangère référence bien une occurrence d'une clé primaire. Si la colonne source est NOT NULL cela implémente une Dépendance Fonctionnelle forte (cardinalité 1,1), si elle admet le NULL cela implémente une DF faible (cardinalité 0,1).

Bonne pratique : se rédige dans un ALTER TABLE et pas dans un CREATE TABLE.
CREATE TABLE commande (
   ...,
   id_client NUMBER(4) NOT NULL
)
CREATE TABLE client (
   id_client NUMBER(4) NOT NULL,
   ...
)
ALTER TABLE commande ADD CONSTRAINT fk_client FOREIGN KEY (id_client) REFERENCES client (id_client) [ON DELETE CASCADE]
Une FOREIGN KEY peut porte sur plusieurs colonnes.

Si [ODC] est présente, la suppression d'un client entraînera la suppression de ses commandes qui en dépendent. Option peu utilisée car trop dangereuse.

Lorsqu'une table implémente une association, les constituants de sa clé primaire font l'objet de contraintes de table, exemple :
CREATE TABLE lignecde (id_commande NUMBER(3) NOT NULL, id_article NUMBER(3) NOT NULL, qte NUMBER(2), CONSTRAINT pk_lignecde PRIMARY KEY (id_commande, id_article))
ALTER TABLE lignecde ADD CONSTRAINT fk_commande FOREIGN KEY (id_commande) REFERENCES commande (id_commande)
ALTER TABLE lignecde ADD CONSTRAINT fk_article FOREIGN KEY (id_ article) REFERENCES article (id_ article)

Supprimer une contrainte

Concerne aussi bien les contraintes de colonnes que celles de tables.
ALTER TABLE client DROP CONSTRAINT pk_client [CASCADE]
Si la colonne est cible de contraintes FOREIGN KEY, il faut ajouter CASCADE pour les contraintes soient supprimées sinon la requête est refusée.

Activer/désactiver une contrainte

Permet de manipuler les données sans être soumis aux contraintes.
ALTER TABLE commande DISABLE CONSTRAINT fk_client
ALTER TABLE commande ENABLE CONSTRAINT fk_client