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. Den här artikeln kan också hjälpa dig att avgöra när du ska använda en datadefinitionsfråga.
Artikelinnehåll
Översikt
Till skillnad från andra Access-frågor så hämtar inte en datadefinitionsfråga data. I stället används datadefinitionsfrågan 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 på nytt skapa delar av databasschemat bara genom att köra vissa frågor. Överväg att använda en datadefinitionsfråga om du är van vid SQL-uttryck och planerar att ta bort och skapa vissa tabeller, villkor, index eller relationer igen.
Varning!: Det kan vara riskabelt att använda datadefinitionsfrågor för att ändra databasobjekt, eftersom bekräftelsedialogrutor inte medföljer åtgärderna. 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 att underhålla den databas som du använder bör du kontakta databasens administratör innan du kör en datadefinitionsfråga.
Viktigt!: Gör en säkerhetskopia av alla tabeller som ingår innan du kör en datadefinitionsfråga.
DDL-nyckelord
Nyckelord |
Använda |
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ägga 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 |
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 kommandot CREATE TABLE är själva kommandot CREATE TABLE och namnet på tabellen, men vanligtvis vill du definiera några fält eller andra aspekter av tabellen. Tänk dig det här enkla exemplet.
Anta att du vill skapa en tabell för att lagra namn, år och pris på använda bilar som du funderar på att köpa. Du vill tillåta upp till 30 tecken för namnet och 4 tecken för året. Så här använder du en datadefinitionsfråga för att skapa tabellen:
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
-
Klicka på Frågedesign i gruppen Makron och & flikenSkapa.
-
Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
Designrutnätet är dolt och SQL-vyns objektflik visas.
-
Skriv in följande SQL-instruktion:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
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 kommandot ALTER TABLE för att lägga till, ändra eller släppa kolumner eller begränsningar. Kommandot ALTER TABLE 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 villkoret för varje bil. Du kan göra följande:
-
Klicka på Frågedesign i gruppen Makron och & flikenSkapa.
-
Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
Designrutnätet är dolt och SQL-vyns objektflik visas.
-
Skriv in följande SQL-instruktion:
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
-
Klicka på Kör i gruppen Resultat på fliken Design.
Skapa ett index
Om du vill skapa ett index för 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 fälten du vill indexera och listan med fält som ska tas med 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 översta 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 WITH PRIMARY anger det indexerade fältet eller fälten som primärnyckel i tabellen.
-
Argumentet WITH DISALLOW NULL gör att indexet kräver att ett värde anges för det indexerade fältet, det vill säga null-värden inte tillåts.
Anta att du har en tabell med namnet Bilar med fält som lagrar namn, år, pris och villkor för använda bilar som du överväger att köpa. Anta även att tabellen har blivit stor och att du ofta tar med årfältet i frågor. Du kan skapa ett index för fältet År för att dina frågor ska returnera resultat snabbare genom att använda följande procedur:
-
Klicka på Frågedesign i gruppen Makron och & flikenSkapa.
-
Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
Designrutnätet är dolt och SQL-vyns objektflik visas.
-
Skriv in följande SQL-instruktion:
CREATE INDEX YearIndex ON Cars (Year)
-
Klicka på Kör i gruppen Resultat på fliken Design.
Skapa ett villkor eller en relation
Ett villkor etablerar ett logiskt villkor som ett fält eller en kombination av fält måste uppfylla när värden infogas. En UNIK-begränsning förhindrar 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 villkor som refererar till värdena i ett fält eller en kombination av fält i en annan tabell för att avgöra om ett värde kan infogas i det begränsade fältet eller i en kombination 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 kommandot CREATE TABLE eller ALTER TABLE. 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.
Begränsningar för enstaka fält
En CONSTRAINT-sats med ett fält följer omedelbart definitionen för fältet som begränsningen gäller 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 som lagrar namn, år, pris och villkor för använda bilar som du överväger att köpa. Anta också att du ofta glömmer att ange ett värde för biltillståndet och att du alltid vill registrera den här informationen. Du kan skapa en begränsning för fältet Villkor som hindrar dig från att lämna fältet tomt på följande sätt:
-
Klicka på Frågedesign i gruppen Makron och & flikenSkapa.
-
Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
Designrutnätet är dolt och SQL-vyns objektflik visas.
-
Skriv in följande SQL-instruktion:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
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 bör vara desamma. Vissa av bilar har till exempel ett villkorsvärde som är för dåligt och andra har värdet dåligt.
Obs!: Om du vill följa de återstående procedurerna lägger du till falska data i tabellen Bilar som du skapade i föregående steg.
När du har rensat värdena så att de blir mer konsekventa kan du skapa en tabell med namnet CarCondition med ett fält, namngivet Villkor, som innehåller alla värden som du vill använda för villkoret för bilar:
-
Klicka på Frågedesign i gruppen Makron och & flikenSkapa.
-
Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
Designrutnätet är dolt och SQL-vyns objektflik visas.
-
Skriv in följande SQL-instruktion:
CREATE TABLE CarCondition (VillkorSTEXT(10))
-
Klicka på Kör i gruppen Resultat på fliken Design.
-
Skapa en primärnyckel för tabellen med hjälp av instruktionen ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Om du vill infoga värdena från fältet Villkor i tabellen Bilar i den nya tabellen CarCondition skriver du följande SQL i SQL-vyns objektflik:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Obs!: SQL-uttrycket i det här steget är en lägg till fråga. Till skillnad från en datadefinitionsfråga avslutas en tilläggsfråga med ett semikolon.
-
Klicka på Kör i gruppen Resultat på fliken Design.
Skapa en relation med hjälp av ett villkor
Om du vill kräva att alla nya värden som infogats i fältet Villkor i tabellen Bilar matchar värdet i fältet Villkor i tabellen Bilkondition, kan du sedan skapa en relation mellan CarCondition och Bilar i fältet Villkor genom att använda följande procedur:
-
Klicka på Frågedesign i gruppen Makron och & flikenSkapa.
-
Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
Designrutnätet är dolt och SQL-vyns objektflik visas.
-
Skriv in följande SQL-instruktion:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)
-
Klicka på Kör i gruppen Resultat på fliken Design.
Flerfältsbegränsningar
En CONSTRAINT-sats med flera fält kan endast 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}]}
Överväg ett annat exempel som använder tabellen Bilar. Anta att du vill kontrollera att inga två poster i tabellen Bilar har samma uppsättning värden för Namn, År, Villkor och Pris. Du kan skapa en UNIK-begränsning som gäller för de här fälten på följande sätt:
-
Klicka på Frågedesign i gruppen Makron och & flikenSkapa.
-
Klicka på Datadefinition i gruppen Frågetyp på fliken Design.
Designrutnätet är dolt och SQL-vyns objektflik visas.
-
Skriv in följande SQL-instruktion:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (name, year, condition, price)
-
Klicka på Kör i gruppen Resultat på fliken Design.