Vous pouvez créer et modifier des tables, des contraintes, des index et des relations dans Access en écrivant des requêtes définition des données SQL vue. Cet article décrit les requêtes définition de données et explique comment les utiliser pour créer des tables, des contraintes, des index et des relations. Cet article peut également vous aider à déterminer quand utiliser une requête Définition des données.
Contenu de cet article
Vue d’ensemble
Contrairement à d’autres requêtes Access, une requête Définition des données ne récupère pas les données. À la place, une requête Définition des données utilise le langage de définition des données pour créer, modifier ou supprimer des objets de base de données.
Remarque : Le DDL (Data Definition Language) fait partie du langage SQL (SQL).
Les requêtes Définition des données peuvent être très pratiques. Vous pouvez régulièrement supprimer et re-créer des parties de votre schéma de base de données en exécutant uniquement certaines requêtes. Envisagez d’utiliser une requête Définition des données si vous connaissez les instructions SQL et que vous prévoyez de supprimer et de re créer des tables, des contraintes, des index ou des relations spécifiques.
Avertissement : Il peut être risqué d’utiliser des requêtes Définition des données pour modifier des objets de base de données, car les actions ne sont pas accompagnées par des boîtes de dialogue de confirmation. En cas d’erreur, vous pouvez perdre des données ou modifier la conception d’un tableau par inadvertance. Utilisez une requête Définition des données avec précaution pour modifier des objets dans votre base de données. Si vous n’êtes pas responsable de la maintenance de la base de données que vous utilisez, vous devez consulter l’administrateur de la base de données avant d’exécuter une requête Définition des données.
Important : Faites une copie de sauvegarde des tables concernées avant d’exécuter une requête Définition des données.
Mots clés DDL
Mot clé |
Utilisez |
CREATE |
Créez un index ou une table qui n’existe pas encore. |
ALTER |
Modifiez une table ou une colonne existante. |
DROP |
Supprimez une table, une colonne ou une contrainte existante. |
ADD |
Ajoutez une colonne ou une contrainte à une table. |
COLUMN |
Utilisation avec ADD, ALTER ou DROP |
CONSTRAINT |
Utilisation avec ADD, ALTER ou DROP |
INDEX |
Utilisation avec create |
TABLE |
Utilisation avec l’AD ALTER, CREATE ou DROP |
Créer ou modifier un tableau
Pour créer un tableau, utilisez une commande CRÉER UN TABLEAU. La commande CRÉER UN TABLEAU présente la syntaxe suivante :
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])
Les seuls éléments requis d’une commande CRÉER UN TABLEAU sont la commande CRÉER UN TABLEAU proprement dite et le nom de la table, mais vous souhaitez généralement définir certains champs ou d’autres aspects de la table. Prenons, par exemple, un exemple simple.
Supposons que vous vouliez créer une table pour stocker le nom, l’année et le prix des voitures utilisées que vous envisagez d’acheter. Vous souhaitez autoriser jusqu’à 30 caractères pour le nom et 4 caractères pour l’année. Pour utiliser une requête Définition des données pour créer la table, vous pouvez utiliser les opérations suivantes :
Remarque : Vous devrez peut-être activer le contenu de la base de données pour qu’une requête Définition des données s’exécute :
-
Dans la barre des messages, cliquez sur Activer le contenu.
Créer un tableau
-
Sous l’onglet Créer, dans le groupe Macros & Code, cliquez sur Création de requête.
-
Sous l’onglet Création, dans le groupe Type de requête, cliquez sur Définition des données.
La grille de création est masquée, et l SQL’onglet Affichage de l’objet s’affiche.
-
Tapez l’instruction SQL suivante :
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Modifier un tableau
Pour modifier une table, utilisez une commande ALTER TABLE. Vous pouvez utiliser une commande ALTER TABLE pour ajouter, modifier ou déposer (supprimer) des colonnes ou des contraintes. Une commande ALTER TABLE a la syntaxe suivante :
ALTER TABLE table_name predicate
où prédicat peut être l’un des suivants :
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Supposons que vous vouliez ajouter un champ de texte de 10 caractères pour stocker des informations sur la condition de chaque voiture. Vous pouvez effectuer les opérations suivantes :
-
Sous l’onglet Créer, dans le groupe Macros & Code, cliquez sur Création de requête.
-
Sous l’onglet Création, dans le groupe Type de requête, cliquez sur Définition des données.
La grille de création est masquée, et l SQL’onglet Affichage de l’objet s’affiche.
-
Tapez l’instruction SQL suivante :
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Créer un index
Pour créer un index sur une table existante, vous utilisez une commande CREATE INDEX. Une commande CREATE INDEX a la syntaxe suivante :
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Les seuls éléments requis sont la commande CREATE INDEX, le nom de l’index, l’argument ON, le nom de la table qui contient les champs à indexer et la liste des champs à inclure dans l’index.
-
L’argument DESC entraîne la création de l’index dans l’ordre décroit, ce qui peut s’avérer utile si vous exécutez fréquemment des requêtes qui recherchent les premières valeurs du champ indexé, ou qui trient le champ indexé dans l’ordre décroit. Par défaut, un index est créé dans l’ordre croissant.
-
L’argument WITH PRIMARY établit le ou les champs indexés comme clé primaire de la table.
-
L’argument AVEC DISALLOW NULL exige que l’index exige l’entrée d’une valeur pour le champ indexé, c’est-à-dire que les valeurs Null ne sont pas autorisées.
Supposons que vous avez une table nommée Véhicules avec des champs qui stockent le nom, l’année, le prix et la condition des voitures utilisées que vous envisagez d’acheter. Supposons également que la table est devenue grande et que vous incluez souvent le champ Année dans les requêtes. Vous pouvez créer un index sur le champ Year pour permettre à vos requêtes de renvoyer des résultats plus rapidement à l’aide de la procédure suivante :
-
Sous l’onglet Créer, dans le groupe Macros & Code, cliquez sur Création de requête.
-
Sous l’onglet Création, dans le groupe Type de requête, cliquez sur Définition des données.
La grille de création est masquée, et l SQL’onglet Affichage de l’objet s’affiche.
-
Tapez l’instruction SQL suivante :
CREATE INDEX YearIndex ON Cars (Year)
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Créer une contrainte ou une relation
Une contrainte établit une condition logique qu’un champ ou une combinaison de champs doit respecter lors de l’insertion de valeurs. Par exemple, une contrainte UNIQUE empêche le champ contrainte d’accepter une valeur qui dupliquerait une valeur existante pour le champ.
Une relation est un type de contrainte qui fait référence aux valeurs d’un champ ou d’une combinaison de champs d’une autre table pour déterminer si une valeur peut être insérée dans le champ contrainte ou dans une combinaison de champs. Vous n’utilisez pas de mot clé spécial pour indiquer qu’une contrainte est une relation.
Pour créer une contrainte, vous devez utiliser une clause CONSTRAINT dans une commande CREATE TABLE ou ALTER TABLE. Il existe deux types de clauses CONSTRAINT : l’une pour la création d’une contrainte sur un seul champ, et l’autre pour la création d’une contrainte sur plusieurs champs.
Contraintes sur champ unique
Une clause CONSTRAINT sur champ unique suit immédiatement la définition du champ qu’elle limite et présente la syntaxe suivante :
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Supposons que vous avez une table nommée Véhicules avec des champs qui stockent le nom, l’année, le prix et la condition des voitures utilisées que vous envisagez d’acheter. Supposons également que vous oubliez fréquemment d’entrer une valeur pour la condition de la voiture et que vous souhaitez toujours enregistrer ces informations. Vous pouvez créer une contrainte sur le champ Condition qui vous empêche de laisser le champ vide, à l’aide de la procédure suivante :
-
Sous l’onglet Créer, dans le groupe Macros & Code, cliquez sur Création de requête.
-
Sous l’onglet Création, dans le groupe Type de requête, cliquez sur Définition des données.
La grille de création est masquée, et l SQL’onglet Affichage de l’objet s’affiche.
-
Tapez l’instruction SQL suivante :
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Supposons maintenant qu’après un certain temps, vous remarquez que le champ Condition doit avoir de nombreuses valeurs similaires. Par exemple, certaines voitures ont une valeur de condition médiocre et d’autres sont mauvaises.
Remarque : Si vous voulez suivre les procédures restantes, ajoutez des données factices à la table Véhicules que vous avez créée lors des étapes précédentes.
Une fois que vous avez nettoyé les valeurs afin qu’elles soient plus cohérentes, vous pouvez créer une table, nommée CarCondition, avec un champ, nommé Condition, qui contient toutes les valeurs que vous voulez utiliser pour la condition des voitures :
-
Sous l’onglet Créer, dans le groupe Macros & Code, cliquez sur Création de requête.
-
Sous l’onglet Création, dans le groupe Type de requête, cliquez sur Définition des données.
La grille de création est masquée, et l SQL’onglet Affichage de l’objet s’affiche.
-
Tapez l’instruction SQL suivante :
CREATE TABLE CarCondition (Condition TEXT(10))
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
-
Créez une clé primaire pour la table à l’aide d’une instruction ALTER TABLE :
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Pour insérer les valeurs du champ Condition de la table Véhicules dans la nouvelle table CarCondition, tapez les valeurs suivantes SQL dans l’onglet SQL’objet Affichage :
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Remarque : L SQL de cette étape est une requête Ajout. Contrairement à une requête définition des données, une requête AddEnd se termine par un point-virgule.
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Créer une relation à l’aide d’une contrainte
Pour exiger que toute nouvelle valeur insérée dans le champ Condition de la table Véhicules corresponde à une valeur du champ Condition dans la table Condition, vous pouvez ensuite créer une relation entre CarCondition et véhicules dans le champ Condition, en utilisant la procédure suivante :
-
Sous l’onglet Créer, dans le groupe Macros & Code, cliquez sur Création de requête.
-
Sous l’onglet Création, dans le groupe Type de requête, cliquez sur Définition des données.
La grille de création est masquée, et l SQL’onglet Affichage de l’objet s’affiche.
-
Tapez l’instruction SQL suivante :
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (condition)
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.
Contraintes sur plusieurs champs
Une clause CONSTRAINT sur plusieurs champs ne peut être utilisée qu’en dehors d’une clause de définition de champ et possède la syntaxe suivante :
CONSTRAINT constraint_name
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
UNIQUE (unique1[, unique2[, ...]]) |
NOT NULL (notnull1[, notnull2[, ...]]) |
FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])
REFERENCES foreign_table
[(fk_field1[, fk_field2[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Prenons un autre exemple qui utilise la table Véhicules. Supposons que vous vouliez vous assurer qu’aucun enregistrement dans la table Véhicules n’a le même jeu de valeurs pour Nom, Année, Condition et Prix. Vous pouvez créer une contrainte UNIQUE qui s’applique à ces champs, à l’aide de la procédure suivante :
-
Sous l’onglet Créer, dans le groupe Macros & Code, cliquez sur Création de requête.
-
Sous l’onglet Création, dans le groupe Type de requête, cliquez sur Définition des données.
La grille de création est masquée, et l SQL’onglet Affichage de l’objet s’affiche.
-
Tapez l’instruction SQL suivante :
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (name, year, condition, price)
-
Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.