Applies ToAccess pour Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Vous pouvez créer et modifier des tables, des contraintes, des index et des relations dans Access en écrivant des requêtes de définition de données en mode SQL. Cet article explique les requêtes de définition de données et comment les utiliser pour créer des tables, des contraintes, des index et des relations. Cet article peut également vous aider à décider quand utiliser une requête de définition de données.

Contenu de cet article

Vue d’ensemble

Contrairement à d’autres requêtes Access, une requête de définition de données ne récupère pas de données. Au lieu de cela, une requête de définition de données utilise le langage de définition de données pour créer, modifier ou supprimer des objets de base de données.

Remarque : Le langage DDL (Data Definition Language) fait partie du langage SQL (Structured Query Language).

Les requêtes de définition de données peuvent être très pratiques. Vous pouvez régulièrement supprimer et recréer des parties de votre schéma de base de données simplement en exécutant des requêtes. Envisagez d’utiliser une requête de définition de données si vous êtes familiarisé avec les instructions SQL et que vous envisagez de supprimer et de recréer des tables, des contraintes, des index ou des relations spécifiques.

Avertissement : L’utilisation de requêtes de définition de données pour modifier des objets de base de données peut être risquée, car les actions ne sont pas accompagnées de boîtes de dialogue de confirmation. Si vous faites une erreur, vous pouvez perdre des données ou modifier par inadvertance la conception d’une table. Soyez prudent lorsque vous utilisez une requête de définition de données 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 de définition de données.

Important : Effectuez une copie de sauvegarde des tables impliquées avant d’exécuter une requête de définition de données.

Mots clés DDL

Mot clé

Utilisez

CREATE

Créez un index ou une table qui n’existe pas déjà.

ALTER

Modifier une table ou une colonne existante.

DROP

Supprimer une table, une colonne ou une contrainte existante.

ADD

Ajouter une colonne ou une contrainte à une table.

COLUMN

Utiliser avec ADD, ALTER ou DROP

CONSTRAINT

Utiliser avec ADD, ALTER ou DROP

INDEX

Utiliser avec CREATE

TABLE

Utiliser avec ALTER, CREATE ou DROP

Haut de la page

Créer ou modifier une table

Pour créer une table, vous utilisez une commande CREATE TABLE. Une commande CREATE TABLE a 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 CREATE TABLE sont la commande CREATE TABLE elle-même et le nom de la table, mais vous souhaiterez généralement définir certains champs ou d’autres aspects de la table. Prenons cet exemple simple.

Supposons que vous souhaitiez créer une table pour stocker le nom, l’année et le prix des voitures d’occasion 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 de définition de données pour créer la table, procédez comme suit :

Remarque : Vous devrez peut-être d’abord activer le contenu de la base de données pour qu’une requête de définition de données s’exécute :

  • Dans la barre des messages, cliquez sur Activer le contenu.

Créer un tableau

  1. Sous l’onglet Créer , dans le groupe Macros & Code , cliquez sur Création de requête.

  2. Sous l’onglet Création , dans le groupe Type de requête , cliquez sur Définition de données.

    La grille de conception est masquée et l’onglet objet d’affichage SQL s’affiche.

  3. Tapez l’instruction SQL suivante :

    CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)

  4. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Modifier un tableau

Pour modifier une table, vous utilisez une commande ALTER TABLE. Vous pouvez utiliser une commande ALTER TABLE pour ajouter, modifier ou supprimer (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 éléments 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 souhaitiez ajouter un champ de texte de 10 caractères pour stocker des informations sur l’état de chaque voiture. Vous pouvez effectuer les opérations suivantes :

  1. Sous l’onglet Créer , dans le groupe Macros & Code , cliquez sur Création de requête.

  2. Sous l’onglet Création , dans le groupe Type de requête , cliquez sur Définition de données.

    La grille de conception est masquée et l’onglet objet d’affichage SQL s’affiche.

  3. Tapez l’instruction SQL suivante :

    ALTER TABLE Cars ADD COLUMN Condition TEXT(10)

  4. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Haut de la page

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 obligatoires 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écroissant, ce qui peut être 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écroissant. 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 WITH DISALLOW NULL oblige l’index à entrer une valeur pour le champ indexé, c’est-à-dire que les valeurs Null ne sont pas autorisées.

Supposons que vous ayez une table nommée Voitures avec des champs qui stockent le nom, l’année, le prix et l’état des voitures d’occasion que vous envisagez d’acheter. Supposons également que la table soit devenue volumineuse et que vous incluiez fréquemment le champ year dans les requêtes. Vous pouvez créer un index sur le champ Year pour aider vos requêtes à retourner les résultats plus rapidement en utilisant la procédure suivante :

  1. Sous l’onglet Créer , dans le groupe Macros & Code , cliquez sur Création de requête.

  2. Sous l’onglet Création , dans le groupe Type de requête , cliquez sur Définition de données.

    La grille de conception est masquée et l’onglet objet d’affichage SQL s’affiche.

  3. Tapez l’instruction SQL suivante :

    CREATE INDEX YearIndex ON Cars (Year)

  4. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Haut de la page

Créer une contrainte ou une relation

Une contrainte établit une condition logique qu’un champ ou une combinaison de champs doit respecter lorsque des valeurs sont insérées. Par exemple, une contrainte UNIQUE empêche le champ contraint 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 limité ou 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 utilisez une clause CONSTRAINT dans une commande CREATE TABLE ou ALTER TABLE. Il existe deux types de clauses CONSTRAINT : une pour créer une contrainte sur un seul champ et une autre pour créer une contrainte sur plusieurs champs.

Contraintes à champ unique

Une clause CONSTRAINT à champ unique suit immédiatement la définition du champ qu’elle limite et a 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 ayez une table nommée Voitures avec des champs qui stockent le nom, l’année, le prix et l’état des voitures d’occasion que vous envisagez d’acheter. Supposons également que vous oubliez souvent d’entrer une valeur pour l’état 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 :

  1. Sous l’onglet Créer , dans le groupe Macros & Code , cliquez sur Création de requête.

  2. Sous l’onglet Création , dans le groupe Type de requête , cliquez sur Définition de données.

    La grille de conception est masquée et l’onglet objet d’affichage SQL s’affiche.

  3. Tapez l’instruction SQL suivante :

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL

  4. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Supposons maintenant qu’au bout d’un certain temps, vous remarquez que de nombreuses valeurs similaires dans le champ Condition doivent être identiques. Par exemple, certaines voitures ont une valeur condition médiocre et d’autres ont une valeur de mauvaise.

Remarque : Si vous souhaitez suivre les procédures restantes, ajoutez des données factices à la table Cars que vous avez créée dans les étapes précédentes.

Après avoir nettoyé les valeurs pour 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 souhaitez utiliser pour l’état des voitures :

  1. Sous l’onglet Créer , dans le groupe Macros & Code , cliquez sur Création de requête.

  2. Sous l’onglet Création , dans le groupe Type de requête , cliquez sur Définition de données.

    La grille de conception est masquée et l’onglet objet d’affichage SQL s’affiche.

  3. Tapez l’instruction SQL suivante :

    CREATE TABLE CarCondition (Condition TEXT(10))

  4. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

  5. 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

  6. Pour insérer les valeurs du champ Condition de la table Cars dans la nouvelle table CarCondition, tapez le code SQL suivant dans l’onglet objet de vue SQL :

    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

    Remarque : L’instruction SQL de cette étape est une requête Ajout. Contrairement à une requête de définition de données, une requête d’ajout se termine par un point-virgule.

  7. 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 Cars corresponde à une valeur du champ Condition dans la table CarCondition, vous pouvez ensuite créer une relation entre CarCondition et Cars sur le champ nommé Condition, en utilisant la procédure suivante :

  1. Sous l’onglet Créer , dans le groupe Macros & Code , cliquez sur Création de requête.

  2. Sous l’onglet Création , dans le groupe Type de requête , cliquez sur Définition de données.

    La grille de conception est masquée et l’onglet objet d’affichage SQL s’affiche.

  3. Tapez l’instruction SQL suivante :

    ALTER TABLE Cars ALTER COLUMN CONDITION TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)

  4. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Contraintes de champs multiples

Une clause CONSTRAINT à plusieurs champs ne peut être utilisée qu’en dehors d’une clause de définition de champ et a 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 Cars. Supposons que vous souhaitiez vous assurer que deux enregistrements de la table Cars n’ont pas le même jeu de valeurs pour Name, Year, Condition et Price. Vous pouvez créer une contrainte UNIQUE qui s’applique à ces champs à l’aide de la procédure suivante :

  1. Sous l’onglet Créer , dans le groupe Macros & Code , cliquez sur Création de requête.

  2. Sous l’onglet Création , dans le groupe Type de requête , cliquez sur Définition de données.

    La grille de conception est masquée et l’onglet objet d’affichage SQL s’affiche.

  3. Tapez l’instruction SQL suivante :

    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (nom, année, condition, prix)

  4. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Haut de la page

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.

Les communautés vous permettent de poser des questions et d'y répondre, de donner vos commentaires et de bénéficier de l'avis d'experts aux connaissances approfondies.