![Free-eBooks.net](/resources/img/logo-nfe.png)
![All New Design](/resources/img/allnew.png)
Permet de définir un classement pour la colonne qui est différent de celui de la base de
données.
NULL, NOT NULL
Permettent de définir une contrainte de nullité ou de non-nullité sur une colonne existante de
la table.
CHECK, NOCHECK
Permettent d’activer et de désactiver des contraintes d’intégrité.
ENABLE, DISABLE
Permettent d’activer et de désactiver l’exécution des déclencheurs associés à la table.
L'ordre ALTER sur une table permet de :
• Supprimer une colonne
• Supprimer une contrainte
• Ajouter une colonne
• Ajouter une contrainte
• Ajouter une contrainte de ligne DEFAULT
Il ne permet pas de :
58
• Changer le nom d'une colonne
• Changer le type d'une colonne
• Ajouter une contrainte de ligne NULL / NOT NULL
Quelques exemples :
--Ajout d'une colonne
ALTER TABLE Clients ADD CODEREP char(2) null;
--Modification d'une colonne existante
ALTER TABLE Clients
ALTER COLUMN Telephone char(14) not null;
--Ajouter une clé primaire sur la colonne COLONNE1
ALTER TABLE MATABLE1
ADD CONSTRAINT PK_PRIMARY
PRIMARY KEY (COLONNE1)
--Ajouter une clé étrangère à la table LIGCOM
ALTER TABLE LIGCOM
ADD CONSTRAINT FK_LIGCOM_COMPORTER_ENTCOM foreign key (NUMCOM)
REFERENCES ENTCOM (NUMCOM)
GO
/* La contrainte FOREIGN KEY, basé sur la colonne NUMCOM référence le champ
NUMCOM de la table ENTCOM pour garantir que toutes lignes de commandes est
associé à un numéro de commande */
-- Ajout d'une contrainte
ALTER TABLE Clients
ADD CONSTRAINT ck_cpo check(codepostal between 1000 and 95999);
Pour revenir à notre base de données « PAPYRUS ». Pour modifier le type de la colonne
DATCOM de la table ENTCOM.
--Modification de la colonne DATCOM
ALTER TABLE ENTCOM
ALTER COLUMN DATCOM smalldatetime not null;
On procédera de la même manière pour les différents types à modifier. On définira null ou not
null pour la contrainte de nullité.
Définissons également les contraintes répondant à l’énoncé du problème : « Le numéro de
commande est un champ compteur auto incrémenté de 1 ». Si vous souhaitez effectuer
cette action par le code, vous devez supprimer puis recréer votre table en utilisant IDENTITY
(1,1).
CREATE TABLE ENTCOM
(NUMCOM INT NOT NULL IDENTITY(1,1),
NUMFOU INT NOT NULL,
OBSCOM VARCHAR(25) NOT NULL,
DATCOM DATE NOT NULL,
CONSTRAINT PK_NUMCOM PRIMARY KEY (NUMCOM));
« La date de commande est par défaut la date du jour ». Pour la colonne DATCOM on
utilisera la formule getdate().
ALTER TABLE ENTCOM
ADD CONSTRAINT DATCOM CHECK (DATCOM = getdate());
59
Le problème, c’est que nous avons contraint notre colonne à la date du jour. Il n’est par
conséquent pas possible de saisir une autre date que la date du jour alors que si nous
utilisons le code suivant :
ALTER TABLE ENTCOM
ADD CONSTRAINT DATCOM DEFAULT (getdate()) FOR DATCOM;
La colonne proposera la date du jour, mais celle-ci sera alors modifiable.
« L’indice de satisfaction est compris dans une échelle de 1 à 10 ».
ALTER TABLE ENTCOM
ADD CONSTRAINT SATISFT CHECK (SATISF >= 1 AND SATISF <= 10);
« Le code postal est constitué de 5 chiffres ».
ALTER TABLE FOURNISSEUR
ADD CONSTRAINT POSFOU CHECK (POSFOU like ('[0-9][0-9][0-9][0-9][0-9]'));
Nous allons modifier les contraintes des tables LIGCOM, PRODUIT et VENDRE de façon à ce
que lorsque nous modifierons le code d’un produit de la table PRODUIT (à l’aide d’une
instruction UPDATE), la mise à jour se reporte automatiquement sur les tables LIGCOM et
VENDRE. Pour cela nous spécifions la règle de mise à jour « En cascade ».
USE Papyrus
ALTER TABLE vente.LIGCOM
ADD CONSTRAINT FK_LIGCOM_UPDATE FOREIGN KEY (CODART)
REFERENCES vente.PRODUIT (CODART)
ON UPDATE CASCADE
USE Papyrus
ALTER TABLE vente.VENDRE
ADD CONSTRAINT FK_VENDRE_UPDATE FOREIGN KEY (CODART)
REFERENCES vente.PRODUIT (CODART)
ON UPDATE CASCADE
Une fois les relations de chacune des tables modifiées, nous allons mettre à jour notre table
PRODUIT. Mettons à jour le code de l’article « I100 » par exemple.
Use Papyrus
UPDATE vente.PRODUIT
SET CODART = 'I10B'
WHERE CODART = 'I100'
Nous changeons le code de l’article en « I10B ». On enregistre les modifications et on
actualise notre base de données.
60
On interroge maintenant la table VENDRE. On constate que celle-ci a été modifiée
automatiquement.
C’est la même chose pour la table LICOM.
61
La contrainte REFERENCE traduit la liaison qui existe entre une clé primaire et étrangère de
deux tables. Il est conseillé de créer ce genre de contrainte qu’après la création de toutes les
tables impliquées, sinon, lors de la compilation de votre script, des erreurs peuvent
apparaître. Cette contrainte n’a pas de propriété particulière par défaut, il faut les ajouter soi-
même, voyons dans un premier temps sa syntaxe.