Opprette eller endre tabeller eller indekser ved å bruke datadefinisjonsspørringer

Gjelder for
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Du kan opprette og endre tabeller, begrensninger, indekser og relasjoner i Access ved å skrive datadefinisjonsspørringer i SQL-visning. Denne artikkelen forklarer datadefinisjonsspørringer og hvordan du bruker dem til å opprette tabeller, begrensninger, indekser og relasjoner. Denne artikkelen kan også hjelpe deg med å avgjøre når du skal bruke en datadefinisjonsspørring.

I denne artikkelen

Oversikt

I motsetning til andre Access-spørringer henter ikke en datadefinisjonsspørring data. I stedet bruker en datadefinisjonsspørring datadefinisjonsspråk til å opprette, endre eller slette databaseobjekter.

Obs!

Data Definition Language (DDL) er en del av Structured Query Language (SQL).

Spørringer etter datadefinisjoner kan være svært praktiske. Du kan regelmessig slette og gjenopprette deler av databaseskjemaet ved å kjøre noen spørringer. Vurder å bruke en datadefinisjonsspørring hvis du er kjent med SQL-setninger og du har tenkt å slette og gjenopprette bestemte tabeller, begrensninger, indekser eller relasjoner.

Advarsel

Det kan være risikabelt å bruke datadefinisjonsspørringer til å endre databaseobjekter, fordi handlingene ikke ledsages av bekreftelsesdialogbokser. Hvis du gjør en feil, kan du miste data eller utilsiktet endre utformingen av en tabell. Vær forsiktig når du bruker en datadefinisjonsspørring til å endre objekter i databasen. Hvis du ikke er ansvarlig for å vedlikeholde databasen du bruker, bør du ta kontakt med administratoren av databasen før du kjører en datadefinisjonsspørring.

Viktig

Ta en sikkerhetskopi av alle tabellene som er involvert, før du kjører en datadefinisjonsspørring.

DDL-nøkkelord

Nøkkelord Bruk
CREATE Opprette en indeks eller tabell som ikke allerede finnes.
ALTER Endre en eksisterende tabell eller kolonne.
DROP Slette en eksisterende tabell, kolonne eller begrensning.
ADD Legg til en kolonne eller begrensning i en tabell.
COLUMN Bruk med ADD, ALTER eller DROP
CONSTRAINT Bruk med ADD, ALTER eller DROP
INDEX Bruk med OPPRETT
TABLE Bruk med ALTER, CREATE eller DROP

Til toppen av siden

Opprette eller endre en tabell

Du bruker en OPPRETT TABELL-kommando for å opprette en tabell. Kommandoen Opprett tabell har følgende syntaks:

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

De eneste obligatoriske elementene i en OPPRETT TABELL-kommando er selve OPPRETT TABELL-kommandoen og navnet på tabellen, men vanligvis vil du definere noen felt eller andre aspekter av tabellen. Tenk over dette enkle eksemplet.

La oss si at du vil opprette en tabell for å lagre navn, år og pris på brukte biler som du vurderer å kjøpe. Du vil tillate opptil 30 tegn for navnet og 4 tegn for året. Hvis du vil bruke en datadefinisjonsspørring til å opprette tabellen, gjør du følgende:

Obs!

Det kan hende du først må aktivere innholdet i databasen for at en datadefinisjonsspørring skal kjøre:

  • Klikk Aktiver innhold i meldingsfeltet.

Opprette en tabell

  1. Klikk Spørringsutforming i gruppen Makroer & kodeOpprett-fanen.
  2. Klikk Datadefinisjon i Spørringstype-gruppenUtforming-fanen.
    Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.
  3. Skriv inn følgende SQL-setning:
    OPPRETT TABELL Biler (Navn TEKST(30), År TEKST(4), Pris VALUTA)
  4. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

Endre en tabell

Du kan endre en tabell ved å bruke kommandoen ALTER TABLE. Du kan bruke en ALTER TABLE-kommando til å legge til, endre eller fjerne (fjerne) kolonner eller begrensninger. En ALTER TABLE-kommando har følgende syntaks:

ALTER TABLE table_name predicate

der predikat kan være ett av følgende:

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

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

La oss si at du vil legge til et tekstfelt på 10 tegn for å lagre informasjon om tilstanden til hver bil. Du kan gjøre følgende:

  1. Klikk Spørringsutforming i gruppen Makroer & kodeOpprett-fanen.
  2. Klikk Datadefinisjon i Spørringstype-gruppenUtforming-fanen.
    Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.
  3. Skriv inn følgende SQL-setning:
    ALTER TABLE Biler LEGG TIL KOLONNE Betingelsestekst(10)
  4. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

Til toppen av siden

Opprette en indeks

Hvis du vil opprette en indeks i en eksisterende tabell, bruker du kommandoen OPPRETT INDEKS. Kommandoen Opprett indeks har følgende syntaks:

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

De eneste obligatoriske elementene er kommandoen OPPRETT INDEKS, navnet på indeksen, ON-argumentet, navnet på tabellen som inneholder feltene du vil indeksere, og listen over felt som skal inkluderes i indeksen.

  • Argumentet DESC gjør at indeksen opprettes i synkende rekkefølge, noe som kan være nyttig hvis du kjører spørringer som ofte ser etter høyeste verdier for det indekserte feltet, eller som sorterer det indekserte feltet i synkende rekkefølge. En indeks opprettes som standard i stigende rekkefølge.
  • Argumentet WITH PRIMARY etablerer det indekserte feltet eller de indekserte feltene som primærnøkkelen i tabellen.
  • Argumentet WITH DISALLOW NULL fører til at indeksen krever at det angis en verdi for det indekserte feltet – det vil si at nullverdier ikke er tillatt.

La oss si at du har en tabell som heter Biler med felt som lagrer navn, år, pris og tilstand for brukte biler som du vurderer å kjøpe. Anta også at tabellen har blitt stor og at du ofte inkluderer år-feltet i spørringer. Du kan opprette en indeks på År-feltet slik at spørringene returnerer resultater raskere ved å bruke følgende fremgangsmåte:

  1. Klikk Spørringsutforming i gruppen Makroer & kodeOpprett-fanen.
  2. Klikk Datadefinisjon i Spørringstype-gruppenUtforming-fanen.
    Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.
  3. Skriv inn følgende SQL-setning:
    CREATE INDEX YearIndex ON Cars (år)
  4. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

Til toppen av siden

Opprette en begrensning eller relasjon

En betingelse etablerer en logisk betingelse som et felt eller en kombinasjon av felt må oppfylle når verdier settes inn. En UNIK begrensning hindrer for eksempel at det begrensede feltet godtar en verdi som dupliserer en eksisterende verdi for feltet.

En relasjon er en type begrensning som refererer til verdiene i et felt eller en kombinasjon av felt i en annen tabell for å bestemme om en verdi kan settes inn i det begrensede feltet eller kombinasjonen av felt. Du bruker ikke et spesielt nøkkelord for å angi at en begrensning er en relasjon.

Hvis du vil opprette en begrensning, bruker du en CONSTRAINT-setning i en OPPRETT TABELL- eller ALTER TABLE-kommando. Det finnes to typer CONSTRAINT-setninger, én for å opprette en begrensning på ett enkelt felt, og en annen for å opprette en begrensning på flere felt.

Begrensninger for ett felt

En CONSTRAINT-setning for ett felt følger umiddelbart definisjonen av feltet den begrenser, og har følgende syntaks:

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

La oss si at du har en tabell som heter Biler med felt som lagrer navn, år, pris og tilstand for brukte biler som du vurderer å kjøpe. La oss også si at du ofte glemmer å angi en verdi for bilens tilstand, og at du alltid vil registrere denne informasjonen. Du kan opprette en begrensning i Betingelse-feltet som hindrer deg i å la feltet stå tomt, ved å følge denne fremgangsmåten:

  1. Klikk Spørringsutforming i gruppen Makroer & kodeOpprett-fanen.
  2. Klikk Datadefinisjon i Spørringstype-gruppenUtforming-fanen.
    Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.
  3. Skriv inn følgende SQL-setning:
    ALTER TABLE Biler ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
  4. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

La oss nå si at du etter en stund oppdager at det er mange lignende verdier i Betingelse-feltet som skal være like. Noen av bilene har for eksempel en Betingelse-verdi dårlig og andre har verdien dårlig.

Obs!

Hvis du vil følge de gjenværende prosedyrene, kan du legge til falske data i Biler-tabellen som du opprettet i de foregående trinnene.

Når du har ryddet opp verdiene slik at de er mer konsekvente, kan du opprette en tabell kalt CarCondition med ett felt, kalt Condition, som inneholder alle verdiene du vil bruke for tilstanden til biler:

  1. Klikk Spørringsutforming i gruppen Makroer & kodeOpprett-fanen.

  2. Klikk Datadefinisjon i Spørringstype-gruppenUtforming-fanen.
    Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.

  3. Skriv inn følgende SQL-setning:
    CREATE TABLE CarCondition (betingelse TEXT(10))

  4. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

  5. Opprett en primærnøkkel for tabellen ved hjelp av en ALTER TABLE-setning:
    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

  6. Hvis du vil sette inn verdiene fra Betingelse-feltet i Biler-tabellen i den nye CarCondition-tabellen, skriver du inn følgende SQL i objektfanen SQL-visning:
    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

    Obs!

    SQL-setningen i dette trinnet er en tilføyingsspørring. I motsetning til en datadefinisjonsspørring slutter en tilføyingsspørring med et semikolon.

  7. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

Opprette en relasjon ved hjelp av en begrensning

Hvis du vil kreve at nye verdier som settes inn i feltet Betingelse i Biler-tabellen, samsvarer med en verdi i Betingelse-feltet i CarCondition-tabellen, kan du deretter opprette en relasjon mellom CarCondition og Cars i feltet kalt Condition ved å følge denne fremgangsmåten:

  1. Klikk Spørringsutforming i gruppen Makroer & kodeOpprett-fanen.
  2. Klikk Datadefinisjon i Spørringstype-gruppenUtforming-fanen.
    Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.
  3. Skriv inn følgende SQL-setning:
    ALTER TABLE Biler ALTER COLUMN Betingelse TEKSTBEGRENSNING FKeyCondition REFERANSER CarCondition (Tilstand)
  4. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

Begrensninger for flere felt

En CONSTRAINT-setning med flere felt kan bare brukes utenfor en feltdefinisjonssetning og har følgende syntaks:

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

Se på et annet eksempel som bruker biltabellen. La oss si at du vil sikre at ingen poster i Biler-tabellen har samme sett med verdier for Navn, År, Tilstand og Pris. Du kan opprette en UNIK betingelse som gjelder for disse feltene, ved å bruke følgende fremgangsmåte:

  1. Klikk Spørringsutforming i gruppen Makroer & kodeOpprett-fanen.
  2. Klikk Datadefinisjon i Spørringstype-gruppenUtforming-fanen.
    Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.
  3. Skriv inn følgende SQL-setning:
    ALTER TABLE Biler LEGG TIL BEGRENSNING NoDupes UNIQUE (navn, år, tilstand, pris)
  4. Klikk på Kjør i Resultater-gruppen på Utforming-fanen.

Til toppen av siden