Du kan oprette og redigere tabeller, begrænsninger, indekser og relationer i Access ved at skrive datadefinitionsforespørgsler i SQL-visning. I denne artikel forklares datadefinitionsforespørgsler, og hvordan du kan bruge dem til at oprette tabeller, begrænsninger, indekser og relationer. Denne artikel kan også hjælpe dig med at beslutte, hvornår du vil bruge en datadefinitionsforespørgsel.
I denne artikel
Oversigt
I modsætning til andre Access-forespørgsler henter en datadefinitionsforespørgsel ikke data. I stedet bruger en datadefinitionsforespørgsel Datadefinitionssprog til at oprette, redigere eller slette databaseobjekter.
Bemærk!: DDL (Data Definition Language) er en del af SQL (Structured Query Language).
Datadefinitionsforespørgsler kan være meget praktiske. Du kan jævnligt slette og genoprette dele af databaseskemaet blot ved at køre nogle forespørgsler. Overvej at bruge en datadefinitionsforespørgsel, hvis du er bekendt med SQL-sætninger, og du planlægger at slette og genoprette bestemte tabeller, begrænsninger, indekser eller relationer.
Advarsel!: Det kan være risikabelt at bruge datadefinitionsforespørgsler til at ændre databaseobjekter, fordi handlingerne ikke ledsages af bekræftelsesdialogbokse. Hvis du laver en fejl, kan du miste data eller utilsigtet ændre designet af en tabel. Vær forsigtig, når du bruger en datadefinitionsforespørgsel til at redigere objekter i databasen. Hvis du ikke er ansvarlig for at vedligeholde den database, du bruger, skal du kontakte administratoren af databasen, før du kører en datadefinitionsforespørgsel.
Vigtigt!: Opret en sikkerhedskopi af eventuelle tabeller, der er involveret, før du kører en datadefinitionsforespørgsel.
DDL-nøgleord
Nøgleord: |
Brug |
CREATE |
Opret et indeks eller en tabel, der ikke allerede findes. |
ALTER |
Rediger en eksisterende tabel eller kolonne. |
DROP |
Slet en eksisterende tabel, kolonne eller begrænsning. |
ADD |
Føj en kolonne eller en begrænsning til en tabel. |
COLUMN |
Brug sammen med ADD, ALTER eller DROP |
BEGRÆNSNING |
Brug sammen med ADD, ALTER eller DROP |
INDEX |
Brug med CREATE |
TABLE |
Brug sammen med ALTER, CREATE eller DROP |
Opret eller rediger en tabel
Hvis du vil oprette en tabel, skal du bruge kommandoen CREATE TABLE. Kommandoen OPRET TABEL har følgende syntaks:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...][, CONSTRAINT constraint1 [, ...]])
De eneste påkrævede elementer i kommandoen CREATE TABLE er selve kommandoen CREATE TABLE og navnet på tabellen, men som regel skal du definere nogle felter eller andre aspekter af tabellen. Overvej dette enkle eksempel.
Antag, at du vil oprette en tabel til lagring af navn, år og prisen på brugte biler, som du overvejer at købe. Du vil tillade op til 30 tegn for navnet og 4 tegn for året. Hvis du vil bruge en datadefinitionsforespørgsel til at oprette tabellen, skal du gøre følgende:
Bemærk!: Du skal muligvis først aktivere indholdet af databasen for at køre en datadefinitionsforespørgsel:
-
Klik på Aktivér indhold på meddelelseslinjen.
Opret en tabel
-
Klik på Forespørgselsdesign i gruppen Makroer & Kode under fanen Opret.
-
Klik på Datadefinition i gruppen Forespørgselstype under fanen Design.
Designgitteret er skjult, og fanen SQL-visningsobjekt vises.
-
Skriv følgende SQL-sætning:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
Klik på Kør i gruppen Resultater under fanen Design.
Ændre en tabel
Hvis du vil ændre en tabel, skal du bruge kommandoen ALTER TABLE. Du kan bruge kommandoen ALTER TABLE til at tilføje, ændre eller slippe (fjerne) kolonner eller begrænsninger. Kommandoen ALTER TABLE har følgende syntaks:
ALTER TABLE table_name predicate
hvor prædikat kan være et af 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
Antag, at du vil tilføje et tekstfelt på 10 tegn for at gemme oplysninger om hver bils tilstand. Du kan gøre følgende:
-
Klik på Forespørgselsdesign i gruppen Makroer & Kode under fanen Opret.
-
Klik på Datadefinition i gruppen Forespørgselstype under fanen Design.
Designgitteret er skjult, og fanen SQL-visningsobjekt vises.
-
Skriv følgende SQL-sætning:
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
-
Klik på Kør i gruppen Resultater under fanen Design.
Oprette et indeks
Hvis du vil oprette et indeks i en eksisterende tabel, skal du bruge kommandoen CREATE INDEX. Kommandoen OPRET INDEKS har følgende syntaks:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...]) [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
De eneste påkrævede elementer er kommandoen CREATE INDEX, navnet på indekset, argumentet TIL, navnet på den tabel, der indeholder de felter, du vil indeksere, og listen over felter, der skal medtages i indekset.
-
Argumentet DESC medfører, at indekset oprettes i faldende rækkefølge, hvilket kan være nyttigt, hvis du ofte kører forespørgsler, der søger efter de øverste værdier for det indekserede felt, eller hvis du sorterer det indekserede felt i faldende rækkefølge. Som standard oprettes et indeks i stigende rækkefølge.
-
Argumentet WITH PRIMARY etablerer det eller de indekserede felter som tabellens primær nøgle .
-
Argumentet WITH DISALLOW NULL medfører, at indekset kræver, at der angives en værdi for det indekserede felt – dvs. null-værdier er ikke tilladt.
Antag, at du har en tabel med navnet Biler med felter, der gemmer navn, år, pris og betingelse for brugte biler, som du overvejer at købe. Antag også, at tabellen er blevet stor, og at du ofte medtager år-feltet i forespørgsler. Du kan oprette et indeks i feltet År for at hjælpe dine forespørgsler med hurtigere at returnere resultater ved hjælp af følgende fremgangsmåde:
-
Klik på Forespørgselsdesign i gruppen Makroer & Kode under fanen Opret.
-
Klik på Datadefinition i gruppen Forespørgselstype under fanen Design.
Designgitteret er skjult, og fanen SQL-visningsobjekt vises.
-
Skriv følgende SQL-sætning:
CREATE INDEX YearIndex ON Cars (Year)
-
Klik på Kør i gruppen Resultater under fanen Design.
Oprette en begrænsning eller en relation
En begrænsning etablerer en logisk betingelse, som et felt eller en kombination af felter skal opfylde, når der indsættes værdier. En ENTYDIGE-begrænsning forhindrer f.eks. det begrænsede felt i at acceptere en værdi, der ville duplikere en eksisterende værdi for feltet.
En relation er en type begrænsning, der refererer til værdierne i et felt eller en kombination af felter i en anden tabel for at afgøre, om en værdi kan indsættes i det begrænsede felt eller en kombination af felter. Du bruger ikke et særligt nøgleord til at angive, at en begrænsning er en relation.
Hvis du vil oprette en begrænsning, skal du bruge en CONSTRAINT-delsætning i en CREATE TABLE- eller ALTER TABLE-kommando. Der findes to typer CONSTRAINT-delsætninger: én til at oprette en begrænsning på et enkelt felt og en anden til at oprette en begrænsning på flere felter.
Begrænsninger for enkeltfelter
En CONSTRAINT-delsætning med et enkelt felt følger umiddelbart definitionen af det felt, som det begrænser, 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}]}
Antag, at du har en tabel med navnet Biler med felter, der gemmer navn, år, pris og betingelse for brugte biler, som du overvejer at købe. Antag også, at du ofte glemmer at indtaste en værdi for bilens tilstand, og at du altid vil registrere disse oplysninger. Du kan oprette en betingelse i feltet Betingelse, der forhindrer dig i at lade feltet være tomt, ved at benytte følgende fremgangsmåde:
-
Klik på Forespørgselsdesign i gruppen Makroer & Kode under fanen Opret.
-
Klik på Datadefinition i gruppen Forespørgselstype under fanen Design.
Designgitteret er skjult, og fanen SQL-visningsobjekt vises.
-
Skriv følgende SQL-sætning:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
Klik på Kør i gruppen Resultater under fanen Design.
Antag nu, at du efter et stykke tid bemærker, at der er mange lignende værdier i feltet Betingelse, der skal være de samme. For eksempel har nogle af bilerne en Tilstand værdi af fattige og andre har en værdi af dårlig.
Bemærk!: Hvis du vil følge med i de resterende procedurer, skal du føje nogle falske data til tabellen Biler, som du oprettede i de foregående trin.
Når du har ryddet værdierne op, så de er mere ensartede, kan du oprette en tabel med navnet CarCondition med ét felt, kaldet Betingelse, der indeholder alle de værdier, du vil bruge til bilers tilstand:
-
Klik på Forespørgselsdesign i gruppen Makroer & Kode under fanen Opret.
-
Klik på Datadefinition i gruppen Forespørgselstype under fanen Design.
Designgitteret er skjult, og fanen SQL-visningsobjekt vises.
-
Skriv følgende SQL-sætning:
CREATE TABLE CarCondition (Condition TEXT(10))
-
Klik på Kør i gruppen Resultater under fanen Design.
-
Opret en primær nøgle til tabellen ved hjælp af en ALTER TABLE-sætning:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Hvis du vil indsætte værdierne fra feltet Betingelse i tabellen Biler i den nye CarCondition-tabel, skal du skrive følgende SQL i sql-visningsobjektfanen:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Bemærk!: SQL-sætningen i dette trin er en tilføje forespørgsel. I modsætning til en datadefinitionsforespørgsel slutter en tilføjelsesforespørgsel med et semikolon.
-
Klik på Kør i gruppen Resultater under fanen Design.
Oprette en relation ved hjælp af en begrænsning
Hvis du vil kræve, at en ny værdi, der indsættes i feltet Betingelse i tabellen Biler, svarer til værdien i feltet Betingelse i tabellen CarCondition, kan du derefter oprette en relation mellem CarCondition og Biler i feltet Betingelse ved at benytte følgende fremgangsmåde:
-
Klik på Forespørgselsdesign i gruppen Makroer & Kode under fanen Opret.
-
Klik på Datadefinition i gruppen Forespørgselstype under fanen Design.
Designgitteret er skjult, og fanen SQL-visningsobjekt vises.
-
Skriv følgende SQL-sætning:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)
-
Klik på Kør i gruppen Resultater under fanen Design.
Begrænsninger for flere felter
En CONSTRAINT-delsætning med flere felter kan kun bruges uden for en feltdefinitionsdelsætning 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}]}
Overvej et andet eksempel, der bruger tabellen Biler. Antag, at du vil sikre dig, at der ikke er to poster i tabellen Biler, der har det samme sæt af værdier for Navn, År, Betingelse og Pris. Du kan oprette en ENTYDIG-begrænsning, der gælder for disse felter, ved at benytte følgende fremgangsmåde:
-
Klik på Forespørgselsdesign i gruppen Makroer & Kode under fanen Opret.
-
Klik på Datadefinition i gruppen Forespørgselstype under fanen Design.
Designgitteret er skjult, og fanen SQL-visningsobjekt vises.
-
Skriv følgende SQL-sætning:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (navn, år, betingelse, pris)
-
Klik på Kør i gruppen Resultater under fanen Design.