Microsoft SQL Server
Utländska nycklar
Sök…
Utländska nyckelförhållanden / begränsning
Med främmande nycklar kan du definiera förhållandet mellan två tabeller. En (överordnad) tabell måste ha en primär nyckel som unikt identifierar rader i tabellen. En annan (barn) -tabell kan ha värdet på den primära nyckeln från föräldern i en av kolumnerna. Utländska nyckelreferenser begränsning säkerställer att värden i underordnad tabell måste finnas som ett primärt nyckelvärde i överordnad tabell.
I det här exemplet har vi moderbolagstabell med CompanyId-primärnyckel och barnanställdstabell som har id för företaget där den anställd arbetar.
create table Company (
CompanyId int primary key,
Name nvarchar(200)
)
create table Employee (
EmployeeId int,
Name nvarchar(200),
CompanyId int
foreign key references Company(companyId)
)
utländska nyckelreferenser säkerställer att värden infogade i kolumnen Employee.CompanyId måste också finnas i kolumnen Company.CompanyId. Ingen kan också ta bort företag i företagstabellen om det finns åtminstone en anställd med ett matchande företagId i barntabell.
Utländsk nyckelförhållande säkerställer att rader i två tabeller inte kan "avlänkas".
Upprätthålla förhållandet mellan föräldrar / barnrader
Låt oss anta att vi har en rad i företagstabell med företagId 1. Vi kan infoga rad i medarbetartabell som har företagId 1:
insert into Employee values (17, 'John', 1)
Vi kan dock inte sätta in anställda som inte har ett befintligt företagId:
insert into Employee values (17, 'John', 111111)
Msg 547, Level 16, State 0, Line 12 INSERT-uttalandet strider mot den utländska nyckelbegränsningen "FK__Employee__Compan__1EE485AA". Konflikten inträffade i databasen "MyDb", tabellen "dbo.Company", kolumnen "CompanyId". Uttalandet har avslutats.
Vi kan inte heller ta bort överordnade rader i företagstabellen så länge det finns minst en underordnad rad i medarbetartabellen som refererar till den.
delete from company where CompanyId = 1
Msg 547, nivå 16, tillstånd 0, rad 14 UTSLAGANDE uttalandet strider mot REFERENCE-begränsningen "FK__Employee__Compan__1EE485AA". Konflikten inträffade i databasen "MyDb", tabellen "dbo.Employee", kolumnen "CompanyId". Uttalandet har avslutats.
Utländska nyckelförhållanden säkerställer att raderna för företag och medarbetare inte "kopplas samman".
Lägga till utländska nyckelförhållanden på befintliga tabeller
Utländsk nyckelbegränsning kan läggas till på befintliga tabeller som fortfarande inte är i relation. Föreställ dig att vi har företag och anställda tabeller där anställd tabell Företag kolumn men inte har utländska nyckelförhållanden. Med ALTER TABLE-sats kan du lägga till främmande nyckelbegränsningar i en befintlig kolumn som refererar till någon annan tabell och primärnyckel i den tabellen:
alter table Employee
add foreign key (CompanyId) references Company(CompanyId)
Lägg till utländsk nyckel på befintligt bord
Utländska nyckelkolumner med begränsning kan läggas till på befintliga tabeller som fortfarande inte är i relation. Föreställ dig att vi har företags- och medarbetartabeller där medarbetartabellen inte har kolumnen CompanyId. Med ALTER TABLE-sats kan du lägga till en ny kolumn med främmande nyckelbegränsningar som hänvisar till någon annan tabell och primär nyckel i den tabellen:
alter table Employee
add CompanyId int foreign key references Company(CompanyId)
Få information om utländska nyckelbegränsningar
sys.foreignkeys systemvy ger information om alla utländska nyckelförhållanden i databasen:
select name,
OBJECT_NAME(referenced_object_id) as [parent table],
OBJECT_NAME(parent_object_id) as [child table],
delete_referential_action_desc,
update_referential_action_desc
from sys.foreign_keys