Skapa främmande nyckelrelationer
gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
I den här artikeln beskrivs hur du skapar sekundärnyckelrelationer i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. Du skapar en relation mellan två tabeller när du vill associera rader i en tabell med rader i en annan.
Behörigheter
För att skapa en ny tabell med en foreign key krävs SKAPA TABELL-behörighet i databasen och ALTER SCHEMA-behörighet för schemat där tabellen skapas.
För att skapa en främmande nyckel i en befintlig tabell krävs ALTER TABLE - behörighet på tabellen.
Begränsningar
En begränsning för främmande nyckel behöver inte enbart länkas till en begränsning för primärnyckel i en annan tabell. Främmande nycklar kan också definieras för att referera till kolumnerna i en
UNIQUE
-restriktion i en annan tabell.När ett annat värde än
NULL
anges i kolumnen för enFOREIGN KEY
villkor måste värdet finnas i den refererade kolumnen. Annars returneras ett felmeddelande om brott mot en extern nyckel. För att säkerställa att alla värden av en komposit utlänsk nyckelbegränsning är verifierade, angeNOT NULL
för alla deltagande kolumner.FOREIGN KEY
begränsningar kan endast referera till tabeller i samma databas på samma server. Referensintegritet mellan databaser måste implementeras via utlösare. Mer information finns i CREATE TRIGGER (Transact-SQL).FOREIGN KEY
begränsningar kan referera till en annan kolumn i samma tabell och kallas självreferens.En
FOREIGN KEY
begränsning som anges på kolumnnivå kan bara visa en referenskolumn. Den här kolumnen måste ha samma datatyp som den kolumn där villkoret definieras.Ett
FOREIGN KEY
villkor som anges på tabellnivå måste ha samma antal referenskolumner som antalet kolumner i listan med villkorskolumner. Datatypen för varje referenskolumn måste också vara samma som motsvarande kolumn i kolumnlistan.Databasmotorn har ingen fördefinierad gräns för antalet
FOREIGN KEY
begränsningar som en tabell kan innehålla som refererar till andra tabeller. Databasmotorn begränsar inte heller antaletFOREIGN KEY
begränsningar som ägs av andra tabeller som refererar till en specifik tabell. Det faktiska antaletFOREIGN KEY
begränsningar som används begränsas dock av maskinvarukonfigurationen och av databasens och programmets utformning. En tabell kan referera till högst 253 andra tabeller och kolumner som sekundärnycklar (utgående referenser). SQL Server 2016 (13.x) och senare versioner ökar gränsen för antalet andra tabeller och kolumner som kan referera till kolumner i en enda tabell (inkommande referenser), från 253 till 10 000. (Kräver minst 130 kompatibilitetsnivå.) Ökningen har följande begränsningar:Fler än 253 externa nyckelreferenser stöds för DML-åtgärder på
DELETE
ochUPDATE
.MERGE
åtgärder stöds inte.En tabell med en sekundärnyckelreferens till sig själv är fortfarande begränsad till 253 sekundärnyckelreferenser.
Fler än 253 externa nyckelreferenser är för närvarande inte tillgängliga för kolumnlagringsindex eller minnesoptimerade tabeller.
FOREIGN KEY
begränsningar tillämpas inte på temporära tabeller.Om en sekundärnyckel definieras i en CLR-användardefinierad typkolumn måste implementeringen av typen ha stöd för binär ordning. Mer information finns i CLR User-Defined Types.
En kolumn av typen varchar(max) kan endast delta i en
FOREIGN KEY
begränsning om den primära nyckeln som den refererar till också definieras som typ varchar(max).
Skapa en främmande nyckelrelation i Tabelldesignern
Använda SQL Server Management Studio
I Object Explorer, högerklicka på tabellen som ska finnas på den främmande nyckelsidan av relationen och välj Design.
Tabellen öppnas i Skapa och uppdatera databastabeller.
På menyn Table Designer väljer du Relationer. (Se menyn Table Designer i rubriken, eller högerklicka i det tomma utrymmet i tabelldefinitionen och välj sedan Relationer....)
I dialogrutan Relationer med främmande nyckel väljer du Lägg till.
Relationen visas i listan Vald relation med ett systemnamn i formatet
FK_<tablename>_<tablename>
, där det första tabellnamnet är namnet på den externa nyckeltabellen och det andra tabellnamnet är namnet på primärnyckeltabellen. Detta är bara en standard- och vanlig namngivningskonvention för fältet (Namn) i objektet för främmande nyckel.Välj relationen i listan Valda Relationer.
Välj Tabeller och Kolumnspecifikation i rutnätet till höger och välj ellipserna (...) till höger om egenskapen.
I dialogrutan Tabeller och kolumner i listrutan Primärnyckel väljer du den tabell som ska finnas på primärnyckelsidan i relationen.
I rutnätet under dialogrutan väljer du de kolumner som bidrar till tabellens primära nyckel. I den intilliggande rutnätscellen till höger om varje kolumn väljer du motsvarande kolumn för utländsk nyckel i tabellen med utländsk nyckel.
Table Designer föreslår ett namn för relationen. Om du vill ändra det här namnet redigerar du innehållet i textrutan Relationsnamn.
Välj OK för att skapa relationen.
Stäng tabellkonstruktörfönstret och spara dina ändringar för att ändringen av den externa nyckelrelationen ska börja gälla.
Skapa en främmande nyckel i en ny tabell
Använd Transact-SQL
I följande exempel skapas en tabell och en främmande nyckelbegränsning definieras för kolumnen TempID
som refererar till kolumnen SalesReasonID
i tabellen Sales.SalesReason
i databasen AdventureWorks
. Satserna ON DELETE CASCADE
och ON UPDATE CASCADE
används för att säkerställa att ändringar som görs i Sales.SalesReason
tabell sprids automatiskt till tabellen Sales.TempSalesReason
.
CREATE TABLE Sales.TempSalesReason (
TempID INT NOT NULL,
Name NVARCHAR(50),
CONSTRAINT PK_TempSales
PRIMARY KEY NONCLUSTERED (TempID),
CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason(SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Skapa en främmande nyckel i en befintlig tabell
Använd Transact-SQL
I följande exempel skapas en sekundärnyckel i kolumnen TempID
och refererar till kolumnen SalesReasonID
i tabellen Sales.SalesReason
i AdventureWorks
-databasen.
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE;