Tabellen of indexen maken of wijzigen met een definitiequery

Van toepassing op
Access voor Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

U kunt tabellen, beperkingen, indexen en relaties in Access maken en wijzigen door definitiequery's te schrijven in de SQL-weergave. In dit artikel wordt definitiequery's beschreven en wordt uitgelegd hoe u hiermee tabellen, beperkingen, indexen en relaties maakt. Dit artikel helpt u ook om te bepalen wanneer u een definitiequery moet gebruiken.

In dit artikel

Overzicht

In tegenstelling tot andere Access-query's, worden met een definitiequery geen gegevens opgehaald. In plaats daarvan wordt in een definitiequery Data Definition Language gebruikt om databaseobjecten te maken, wijzigen of verwijderen.

Opmerking

Data Definition Language (DDL) maakt deel uit van Structured Query Language (SQL).

Definitiequery's kunnen erg handig zijn. U kunt regelmatig delen van uw databaseschema verwijderen en opnieuw maken door enkele query's uit te voeren. U kunt een definitiequery gebruiken als u bekend bent met SQL-instructies en van plan bent bepaalde tabellen, beperkingen, indexen of relaties te verwijderen en opnieuw te maken.

Waarschuwing

Het gebruik van definitiequery's om databaseobjecten te wijzigen kan riskant zijn, omdat de acties niet gepaard gaan met bevestigingsdialoogvensters. Als u een fout maakt, kunnen gegevens verloren gaan of onbedoeld het ontwerp van een tabel worden gewijzigd. Wees voorzichtig wanneer u een definitiequery gebruikt om objecten in de database te wijzigen. Als u niet verantwoordelijk bent voor het onderhoud van de database die u gebruikt, dient u contact op te nemen met de beheerder van de database voordat u een definitiequery uitvoert.

Belangrijk

Maak een back-up van de betrokken tabellen voordat u een definitiequery uitvoert.

DDL-trefwoorden

Trefwoord Gebruik
CREATE Maak een index of tabel die nog niet bestaat.
ALTER Een bestaande tabel of kolom wijzigen.
DROP Een bestaande tabel, kolom of beperking verwijderen.
ADD Een kolom of een beperking toevoegen aan een tabel.
COLUMN Te gebruiken met ADD, ALTER of DROP
CONSTRAINT Te gebruiken met ADD, ALTER of DROP
INDEX Gebruiken met CREATE
TABLE Te gebruiken met ALTER, CREATE of DROP

Naar boven

Een tabel maken of wijzigen

Gebruik de opdracht CREATE TABLE om een tabel te maken. Een opdracht TABEL MAKEN heeft de volgende syntaxis:

CREATE TABLE table_name 
 (field1 type [(size)] [NOT NULL] [index1]
 [, field2 type [(size)] [NOT NULL] [index2]
 [, ...][, CONSTRAINT constraint1 [, ...]])

De enige vereiste elementen van een opdracht CREATE TABLE zijn de opdracht CREATE TABLE zelf en de naam van de tabel, maar meestal zult u enkele velden of andere aspecten van de tabel willen definiëren. Beschouw dit eenvoudige voorbeeld.

Stel dat u een tabel wilt maken met de naam, het jaar en de prijs van tweedehands auto's die u overweegt te kopen. U wilt maximaal 30 tekens voor de naam en 4 tekens voor het jaar toestaan. Ga als volgt te werk om de tabel te maken met een definitiequery:

Opmerking

Het is mogelijk dat u eerst de inhoud van de database moet inschakelen om een definitiequery te kunnen uitvoeren:

  • Klik op de berichtenbalk op Inhoud inschakelen.

Een tabel maken

  1. Klik op het tabblad Maken , in de groep Macro's & code , op Queryontwerp.
  2. Klik op het tabblad Ontwerpen in de groep Querytype op Gegevensdefinitie.
    Het ontwerpraster is verborgen en het objecttabblad van de SQL-weergave wordt weergegeven.
  3. Typ de volgende SQL-instructie:
    CREATE TABLE Auto's (Naam TEKST(30), Jaar TEKST(4), Prijs VALUTA)
  4. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Een tabel wijzigen

Als u een tabel wilt wijzigen, gebruikt u een ALTER TABLE-opdracht. U kunt de opdracht ALTER TABLE gebruiken om kolommen of beperkingen toe te voegen, te wijzigen of te verwijderen (te verwijderen). Een opdracht ALTER TABLE heeft de volgende syntaxis:

ALTER TABLE table_name predicate

waarbij predicaat een van de volgende waarden kan zijn:

ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

Stel dat u een tekstveld van tien tekens wilt toevoegen om informatie over de staat van elke auto op te slaan. U kunt het volgende doen:

  1. Klik op het tabblad Maken , in de groep Macro's & code , op Queryontwerp.
  2. Klik op het tabblad Ontwerpen in de groep Querytype op Gegevensdefinitie.
    Het ontwerpraster is verborgen en het objecttabblad van de SQL-weergave wordt weergegeven.
  3. Typ de volgende SQL-instructie:
    ALTER TABLE Auto's KOLOM TOEVOEGEN Voorwaarde TEKST(10)
  4. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Naar boven

Indexen maken

Gebruik de opdracht CREATE INDEX om een index te maken op basis van een bestaande tabel. Een opdracht Index maken heeft de volgende syntaxis:

CREATE [UNIQUE] INDEX index_name
 ON table (field1 [DESC][, field2 [DESC], ...])
 [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

De enige vereiste elementen zijn de opdracht CREATE INDEX, de naam van de index, het argument ON, de naam van de tabel met de velden die u wilt indexeren en de lijst met velden die moeten worden opgenomen in de index.

  • Het argument DESC zorgt ervoor dat de index wordt gemaakt in aflopende volgorde, wat handig kan zijn als u vaak query's uitvoert die zoeken naar top-waarden voor het geïndexeerde veld of die het geïndexeerde veld in aflopende volgorde sorteren. Een index wordt standaard in oplopende volgorde gemaakt.
  • Met het argument MET PRIMAIR worden het geïndexeerde veld of de geïndexeerde velden ingesteld als de primaire sleutel van de tabel.
  • Het argument WITH DISALLOW NULL heeft tot gevolg dat in de index wordt vereist dat een waarde wordt ingevoerd voor het geïndexeerde veld. Dit betekent dat null-waarden niet zijn toegestaan.

Stel dat u een tabel hebt met de naam Auto's met velden waarin de naam, het jaar, de prijs en de staat worden opgeslagen van de tweedehands auto's die u overweegt te kopen. Stel ook dat de tabel groot is geworden en dat u het jaarveld vaak in query's opneemt. Als u ervoor wilt zorgen dat query's sneller resultaten opleveren, kunt u de volgende procedure gebruiken om een index op het veld Jaar te maken:

  1. Klik op het tabblad Maken , in de groep Macro's & code , op Queryontwerp.
  2. Klik op het tabblad Ontwerpen in de groep Querytype op Gegevensdefinitie.
    Het ontwerpraster is verborgen en het objecttabblad van de SQL-weergave wordt weergegeven.
  3. Typ de volgende SQL-instructie:
    CREATE INDEX YearIndex ON Cars (Year)
  4. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Naar boven

Een beperking of een relatie maken

Met een beperking stelt u een logische voorwaarde in waaraan een veld of een combinatie van velden moet voldoen wanneer er waarden worden ingevoegd. Een UNIQUE-beperking voorkomt bijvoorbeeld dat het veld met beperkingen een waarde accepteert die een bestaande waarde voor het veld dupliceert.

Een relatie is een type beperking dat verwijst naar de waarden van een veld of een combinatie van velden in een andere tabel om te bepalen of een waarde kan worden ingevoegd in het veld of een combinatie van velden met beperkingen. U gebruikt geen speciaal trefwoord om aan te geven dat een beperking een relatie is.

Als u een beperking wilt maken, gebruikt u een CONSTRAINT-component in een opdracht CREATE TABLE of ALTER TABLE. Er zijn twee soorten CONSTRAINT-componenten: een om een beperking voor een enkel veld in te stellen en een om een beperking voor meerdere velden in te stellen.

Beperkingen voor één veld

Een CONSTRAINT-component met één veld volgt onmiddellijk na de definitie van het veld dat erdoor wordt beperkt, en heeft de volgende syntaxis:

CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
 REFERENCES foreign_table [(foreign_field)]
 [ON UPDATE {CASCADE | SET NULL}]
 [ON DELETE {CASCADE | SET NULL}]}

Stel dat u een tabel hebt met de naam Auto's met velden waarin de naam, het jaar, de prijs en de staat worden opgeslagen van de tweedehands auto's die u overweegt te kopen. Stel ook dat u vaak vergeet een waarde in te voeren voor de staat van de auto en dat u deze informatie altijd wilt noteren. U kunt een beperking op het veld Voorwaarde maken om te voorkomen dat het veld leeg blijft. Voer de volgende procedure uit:

  1. Klik op het tabblad Maken , in de groep Macro's & code , op Queryontwerp.
  2. Klik op het tabblad Ontwerpen in de groep Querytype op Gegevensdefinitie.
    Het ontwerpraster is verborgen en het objecttabblad van de SQL-weergave wordt weergegeven.
  3. Typ de volgende SQL-instructie:
    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
  4. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Stel nu dat er na verloop van tijd veel vergelijkbare waarden in het veld Voorwaarde staan die normaal gezien hetzelfde zouden moeten zijn. Sommige auto's hebben bijvoorbeeld de waarde Conditie van slecht en andere auto's hebben bijvoorbeeld de waarde slecht.

Opmerking

Als u de resterende procedures wilt uitvoeren, voegt u enkele valse gegevens toe aan de tabel Auto's die u in voorgaande stappen hebt gemaakt.

Nadat u de waarden hebt aangepast zodat ze consistenter zijn, kunt u een tabel maken met de naam CarCondition en één veld, Condition genaamd, dat alle waarden bevat die u wilt gebruiken voor de conditie van auto's:

  1. Klik op het tabblad Maken , in de groep Macro's & code , op Queryontwerp.

  2. Klik op het tabblad Ontwerpen in de groep Querytype op Gegevensdefinitie.
    Het ontwerpraster is verborgen en het objecttabblad van de SQL-weergave wordt weergegeven.

  3. Typ de volgende SQL-instructie:
    CREATE TABLE CarCondition (Condition TEXT(10))

  4. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

  5. Maak een primaire sleutel voor de tabel met behulp van de instructie ALTER TABLE:
    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

  6. Als u de waarden uit het veld Conditie van de tabel Auto's in de nieuwe tabel CarCondition wilt invoegen, typt u de volgende SQL op het objecttabblad van de SQL-weergave:
    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

    Opmerking

    De SQL-instructie in deze stap is een toevoegquery. In tegenstelling tot een definitiequery eindigt een toevoegquery met een puntkomma.

  7. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Een relatie maken met een beperking

Als u wilt dat elke nieuwe waarde die wordt ingevoegd in het veld Conditie van de tabel Auto's overeenkomt met een waarde van het veld Voorwaarde in de tabel AutoConditie, kunt u vervolgens een relatie maken tussen AutoConditie en Auto's op basis van het veld Voorwaarde met behulp van de volgende procedure:

  1. Klik op het tabblad Maken , in de groep Macro's & code , op Queryontwerp.
  2. Klik op het tabblad Ontwerpen in de groep Querytype op Gegevensdefinitie.
    Het ontwerpraster is verborgen en het objecttabblad van de SQL-weergave wordt weergegeven.
  3. Typ de volgende SQL-instructie:
    ALTER TABLE Cars ALTER COLUMN Condition TEKSTBEPERKING FKeyCondition REFERENCES CarCondition (voorwaarde)
  4. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Beperkingen voor meerdere velden

Een CONSTRAINT-component met meerdere velden kan alleen buiten een velddefinitiecomponent worden gebruikt en heeft de volgende syntaxis:

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}]}

Kijk eens naar een ander voorbeeld, waarin de tabel Auto's wordt gebruikt. Stel dat u er zeker van wilt zijn dat twee records in de tabel Auto's niet dezelfde set waarden hebben voor Naam, Jaar, Staat en Prijs. U kunt een UNIQUE-beperking maken die van toepassing is op deze velden, door de volgende procedure uit te voeren:

  1. Klik op het tabblad Maken , in de groep Macro's & code , op Queryontwerp.
  2. Klik op het tabblad Ontwerpen in de groep Querytype op Gegevensdefinitie.
    Het ontwerpraster is verborgen en het objecttabblad van de SQL-weergave wordt weergegeven.
  3. Typ de volgende SQL-instructie:
    ALTER TABLE Auto's ADD CONSTRAINT NoDupes UNIQUE (naam, jaar, staat, prijs)
  4. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Naar boven