Skapa eller redigera tabeller eller index genom att använda en datadefinitionsfråga

Gäller för
Access för Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Du kan skapa och ändra tabeller, villkor, index och relationer i Access genom att skriva datadefinitionsfrågor i SQL-vyn. I den här artikeln förklaras datadefinitionsfrågor och hur du använder dem för att skapa tabeller, villkor, index och relationer. I den här artikeln får du även hjälp att avgöra när du ska använda en datadefinitionsfråga.

Den här artikeln innehåller följande avsnitt

Översikt

Till skillnad från andra Access-frågor hämtar inte en datadefinitionsfråga data. I stället används Data Definition Language för att skapa, ändra eller ta bort databasobjekt.

Obs

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

Datadefinitionsfrågor kan vara mycket praktiska. Du kan regelbundet ta bort och återskapa delar av databasschemat genom att köra vissa frågor. Överväg att använda en datadefinitionsfråga om du är bekant med SQL-uttryck och planerar att ta bort och återskapa vissa tabeller, villkor, index eller relationer.

Varning!

Det kan vara riskabelt att använda datadefinitionsfrågor för att ändra databasobjekt, eftersom åtgärderna inte åtföljs av bekräftelsedialogrutor. Om du gör ett misstag kan du förlora data eller oavsiktligt ändra en tabells design. Var försiktig när du använder en datadefinitionsfråga för att ändra objekt i databasen. Om du inte ansvarar för underhållet av databasen som du använder bör du rådgöra med administratören för databasen innan du kör en datadefinitionsfråga.

Viktigt!

Gör en säkerhetskopia av alla berörda tabeller innan du kör en datadefinitionsfråga.

DDL-nyckelord

Nyckelord Användning
CREATE Skapa ett index eller en tabell som inte redan finns.
ALTER Ändra en befintlig tabell eller kolumn.
DROP Ta bort en befintlig tabell, kolumn eller begränsning.
ADD Lägg till en kolumn eller ett villkor i en tabell.
COLUMN Använd med ADD, ALTER eller DROP
CONSTRAINT Använd med ADD, ALTER eller DROP
INDEX Använd med CREATE
TABLE Använd med ALTER, CREATE eller DROP

Överst på sidan

Skapa eller ändra en tabell

Om du vill skapa en tabell använder du kommandot CREATE TABLE. Ett CREATE TABLE-kommando har följande syntax:

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

De enda obligatoriska elementen i ett CREATE TABLE-kommando är själva kommandot CREATE TABLE och namnet på tabellen, men vanligtvis vill du definiera vissa fält eller andra aspekter av tabellen. Tänk på det här enkla exemplet.

Anta att du vill skapa en tabell för att lagra namn, årtal och pris på begagnade bilar som du funderar på att köpa. Du vill få använda upp till 30 tecken för namnet och 4 tecken för årtalet. Så här skapar du tabellen genom att använda en datadefinitionsfråga:

Obs

Du kanske först måste aktivera innehållet i databasen för att en datadefinitionsfråga ska kunna köras:

  • Klicka på Aktivera innehåll i meddelandefältet.

Skapa en tabell

  1. Klicka på Frågedesign i gruppen Makron & kod påfliken Skapa.
  2. Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
    Designrutnätet är dolt och SQL-vyns objektflik visas.
  3. Skriv följande SQL-uttryck:
    SKAPA TABELL Bilar (Namn TEXT(30), År TEXT(4), pris VALUTA)
  4. Klicka på Kör i gruppen Resultat på fliken Design.

Ändra en tabell

Om du vill ändra en tabell använder du kommandot ALTER TABLE. Du kan använda ett ALTER TABLE-kommando för att lägga till, ändra eller ta bort (ta bort) kolumner eller begränsningar. Ett ALTER TABLE-kommando har följande syntax:

ALTER TABLE table_name predicate

där predikat kan vara något av följande:

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

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

Anta att du vill lägga till ett textfält med 10 tecken för att lagra information om skicket på varje bil. Du kan göra följande:

  1. Klicka på Frågedesign i gruppen Makron & kod påfliken Skapa.
  2. Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
    Designrutnätet är dolt och SQL-vyns objektflik visas.
  3. Skriv följande SQL-uttryck:
    ALTER TABLE Bilar LÄGG TILL KOLUMN Villkorstext(10)
  4. Klicka på Kör i gruppen Resultat på fliken Design.

Överst på sidan

Skapa ett index

Om du vill skapa ett index i en befintlig tabell använder du kommandot CREATE INDEX. Ett CREATE INDEX-kommando har följande syntax:

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

De enda obligatoriska elementen är kommandot CREATE INDEX, namnet på indexet, argumentet ON, namnet på tabellen som innehåller de fält som du vill indexera och listan med fält som ska ingå i indexet.

  • Argumentet DESC gör att indexet skapas i fallande ordning, vilket kan vara användbart om du ofta kör frågor som letar efter de högsta värdena för det indexerade fältet eller som sorterar det indexerade fältet i fallande ordning. Som standard skapas ett index i stigande ordning.
  • Argumentet MED PRIMÄR fastställer det eller de indexerade fälten som primärnyckel för tabellen.
  • Argumentet WITH DISALLOW NULL kräver att ett värde anges för det indexerade fältet, d.v.s. null-värden tillåts inte.

Anta att du har en tabell med namnet Bilar med fält där namn, år, pris och skick för begagnade bilar som du överväger att köpa lagras. Anta även att tabellen har blivit stor och att du ofta tar med årsfältet i frågor. Du kan skapa ett index för fältet År så att frågorna returnerar resultat snabbare på följande sätt:

  1. Klicka på Frågedesign i gruppen Makron & kod påfliken Skapa.
  2. Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
    Designrutnätet är dolt och SQL-vyns objektflik visas.
  3. Skriv följande SQL-uttryck:
    CREATE INDEX YearIndex ON Cars (Year)
  4. Klicka på Kör i gruppen Resultat på fliken Design.

Överst på sidan

Skapa ett villkor eller en relation

Ett villkor anger ett logiskt villkor som ett fält eller en kombination av fält måste uppfylla när värden infogas. Ett UNIK-villkor hindrar till exempel det begränsade fältet från att acceptera ett värde som skulle duplicera ett befintligt värde för fältet.

En relation är en typ av begränsning som refererar till värdena i ett fält eller en kombination av fält i en annan tabell till att avgöra om ett värde kan infogas i det begränsade fältet eller kombinationen av fält. Du använder inte ett särskilt nyckelord för att ange att ett villkor är en relation.

Om du vill skapa en begränsning använder du en CONSTRAINT-sats i ett CREATE TABLE- eller ALTER TABLE-kommando. Det finns två typer av CONSTRAINT-satser: en för att skapa en begränsning för ett enstaka fält och en annan för att skapa en begränsning för flera fält.

Villkor för enstaka fält

En CONSTRAINT-sats med ett fält följer omedelbart efter definitionen för fältet som den begränsar och har följande syntax:

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

Anta att du har en tabell med namnet Bilar med fält där namn, år, pris och skick för begagnade bilar som du överväger att köpa lagras. Anta också att du ofta glömmer att ange ett värde för bilens skick och att du alltid vill registrera denna information. Du kan skapa en begränsning i fältet Villkor som hindrar dig från att lämna fältet tomt på följande sätt:

  1. Klicka på Frågedesign i gruppen Makron & kod påfliken Skapa.
  2. Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
    Designrutnätet är dolt och SQL-vyns objektflik visas.
  3. Skriv följande SQL-uttryck:
    ALTER TABLE Bilar ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
  4. Klicka på Kör i gruppen Resultat på fliken Design.

Anta nu att du efter ett tag märker att det finns många liknande värden i fältet Villkor som borde vara samma. Vissa av bilarna har till exempel värdet dåligt skick och andra har värdet dåligt.

Obs

Om du vill följa med i de återstående procedurerna lägger du till några falska data i tabellen Bilar som du skapade i föregående steg.

När du har rensat värdena så att de är mer konsekventa kan du skapa en tabell med namnet Villkor, med ett fält, Skick, som innehåller alla värden som du vill använda för skicket på bilar:

  1. Klicka på Frågedesign i gruppen Makron & kod påfliken Skapa.

  2. Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
    Designrutnätet är dolt och SQL-vyns objektflik visas.

  3. Skriv följande SQL-uttryck:
    CREATE TABLE CarCondition (Villkor: TEXT(10))

  4. Klicka på Kör i gruppen Resultat på fliken Design.

  5. Skapa en primärnyckel för tabellen med hjälp av en ALTER TABLE-instruktion:
    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMÄRNYCKEL

  6. Om du vill infoga värdena från fältet Skick i tabellen Bilar i den nya tabellen Bilar, skriver du följande SQL på SQL-vyns objektflik:
    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

    Obs

    SQL-uttrycket i det här steget är en tilläggsfråga. Till skillnad från en datadefinitionsfråga avslutas tilläggsfrågor med semikolon.

  7. Klicka på Kör i gruppen Resultat på fliken Design.

Skapa en relation genom att använda en begränsning

Om du vill att ett nytt värde som infogas i fältet Skick i tabellen Bilar matchar ett värde i fältet Skick i tabellen Bilar, skapar du en relation mellan Skick/Skick i fältet Skick i tabellen Bilar på följande sätt:

  1. Klicka på Frågedesign i gruppen Makron & kod påfliken Skapa.
  2. Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
    Designrutnätet är dolt och SQL-vyns objektflik visas.
  3. Skriv följande SQL-uttryck:
    ALTER TABLE Bilar ALTER COLUMN Villkor TEXTBEGRÄNSNING FKeyCondition REFERENSER CarCondition (Villkor)
  4. Klicka på Kör i gruppen Resultat på fliken Design.

Begränsningar för flera fält

En flerfälts-CONSTRAINT-sats kan bara användas utanför en fältdefinitionssats och har följande syntax:

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

Tänk dig ett annat exempel som använder tabellen Bilar. Anta att du vill kontrollera att det inte finns två poster i tabellen Bilar som har samma uppsättning värden för Namn, År, Skick och Pris. Du kan skapa ett UNIKT villkor som gäller för dessa fält på följande sätt:

  1. Klicka på Frågedesign i gruppen Makron & kod påfliken Skapa.
  2. Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
    Designrutnätet är dolt och SQL-vyns objektflik visas.
  3. Skriv följande SQL-uttryck:
    ALTER TABLE Bilar ADD CONSTRAINT NoDupes UNIQUE (namn, år, skick, pris)
  4. Klicka på Kör i gruppen Resultat på fliken Design.

Överst på sidan