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 |
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
- Klikk Spørringsutforming i gruppen Makroer & kode på Opprett-fanen.
- Klikk Datadefinisjon i Spørringstype-gruppen på Utforming-fanen.
Utformingsrutenettet er skjult, og objektfanen SQL-visning vises. - Skriv inn følgende SQL-setning:
OPPRETT TABELL Biler (Navn TEKST(30), År TEKST(4), Pris VALUTA) - 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:
- Klikk Spørringsutforming i gruppen Makroer & kode på Opprett-fanen.
- Klikk Datadefinisjon i Spørringstype-gruppen på Utforming-fanen.
Utformingsrutenettet er skjult, og objektfanen SQL-visning vises. - Skriv inn følgende SQL-setning:
ALTER TABLE Biler LEGG TIL KOLONNE Betingelsestekst(10) - Klikk på Kjør i Resultater-gruppen på Utforming-fanen.
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:
- Klikk Spørringsutforming i gruppen Makroer & kode på Opprett-fanen.
- Klikk Datadefinisjon i Spørringstype-gruppen på Utforming-fanen.
Utformingsrutenettet er skjult, og objektfanen SQL-visning vises. - Skriv inn følgende SQL-setning:
CREATE INDEX YearIndex ON Cars (år) - Klikk på Kjør i Resultater-gruppen på Utforming-fanen.
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:
- Klikk Spørringsutforming i gruppen Makroer & kode på Opprett-fanen.
- Klikk Datadefinisjon i Spørringstype-gruppen på Utforming-fanen.
Utformingsrutenettet er skjult, og objektfanen SQL-visning vises. - Skriv inn følgende SQL-setning:
ALTER TABLE Biler ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL - 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:
Klikk Spørringsutforming i gruppen Makroer & kode på Opprett-fanen.
Klikk Datadefinisjon i Spørringstype-gruppen på Utforming-fanen.
Utformingsrutenettet er skjult, og objektfanen SQL-visning vises.Skriv inn følgende SQL-setning:
CREATE TABLE CarCondition (betingelse TEXT(10))Klikk på Kjør i Resultater-gruppen på Utforming-fanen.
Opprett en primærnøkkel for tabellen ved hjelp av en ALTER TABLE-setning:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEYHvis 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.
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:
- Klikk Spørringsutforming i gruppen Makroer & kode på Opprett-fanen.
- Klikk Datadefinisjon i Spørringstype-gruppen på Utforming-fanen.
Utformingsrutenettet er skjult, og objektfanen SQL-visning vises. - Skriv inn følgende SQL-setning:
ALTER TABLE Biler ALTER COLUMN Betingelse TEKSTBEGRENSNING FKeyCondition REFERANSER CarCondition (Tilstand) - 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:
- Klikk Spørringsutforming i gruppen Makroer & kode på Opprett-fanen.
- Klikk Datadefinisjon i Spørringstype-gruppen på Utforming-fanen.
Utformingsrutenettet er skjult, og objektfanen SQL-visning vises. - Skriv inn følgende SQL-setning:
ALTER TABLE Biler LEGG TIL BEGRENSNING NoDupes UNIQUE (navn, år, tilstand, pris) - Klikk på Kjør i Resultater-gruppen på Utforming-fanen.