SQLShack (Svenska)

0 Comments

i den tidigare artikeln vanliga SQL Server begränsningar: inte NULL, unik och primär nyckel, vi beskrev, i detalj, de tre första typerna av SQL Server begränsningar; inte NULL, unik och primär nyckel. I den här artikeln kommer vi att diskutera de andra tre begränsningarna; utländsk nyckel, kontroll och standard genom att beskriva var och en kortfattat och ge praktiska exempel.,

begränsning av utländsk nyckel

en utländsk nyckel är en databasnyckel som används för att länka två tabeller tillsammans. Den utländska nyckelbegränsningen identifierar relationerna mellan databastabellerna genom att referera till en kolumn, eller uppsättning kolumner, i den underordnade tabellen som innehåller den främmande nyckeln, till den primära NYCKELKOLUMNEN eller uppsättningen kolumner, i den överordnade tabellen.

förhållandet mellan barnet och överordnade tabeller bibehålls genom att kontrollera förekomsten av underordnade tabellen främmande nyckelvärden i den refererade överordnade tabellens primära nyckel innan dessa värden infogas i underordnade tabellen., På så sätt kommer den utländska nyckelbegränsningen, i underordnade tabellen som refererar till huvudnyckeln i överordnade tabellen, att genomdriva databasreferensintegritet. Referensintegritet säkerställer att förhållandet mellan databastabellerna bevaras under datainsättningsprocessen. Minns att den primära nyckelbegränsningen garanterar att inga NULL-eller dubblettvärden för den markerade kolumnen eller kolumnerna kommer att infogas i den tabellen, vilket säkerställer entitetsintegriteten för den tabellen., Den entitetsintegritet som upprätthålls av den primära nyckeln och den referensintegritet som upprätthålls av den utländska nyckeln utgör tillsammans nyckelintegriteten.

begränsningen för utländsk nyckel skiljer sig från begränsningen för primärnyckeln genom att du bara kan skapa en primärnyckel per varje tabell, med möjlighet att skapa flera utländska nyckelbegränsningar i varje tabell genom att referera till flera överordnade tabeller. En annan skillnad är att den utländska nyckeln gör det möjligt att infoga NULL-värden om det inte finns någon NOLLBEGRÄNSNING definierad på den här nyckeln, men den primära nyckeln accepterar inte NULL-värden.,

begränsningen för utländsk nyckel ger dig också möjlighet att styra vilka åtgärder som ska vidtas när det refererade värdet i den överordnade tabellen uppdateras eller tas bort, med hjälp av klausulerna för uppdatering och borttagning. De åtgärder som stöds som kan vidtas vid radering eller uppdatering av den överordnade tabellens värden inkluderar:

  • ingen åtgärd: när klausulerna för uppdatering eller radering är inställda på ingen åtgärd misslyckas den utförda uppdateringen eller raderingen i den överordnade tabellen med ett fel.,
  • CASCADE: om du ställer in på uppdatering eller på Ta bort klausuler till CASCADE kommer samma åtgärd som utförs på de refererade värdena i överordnad tabell att återspeglas i de relaterade värdena i underordnad tabell. Om det refererade värdet till exempel tas bort i den överordnade tabellen tas alla relaterade rader i den underordnade tabellen också bort.
  • ange NULL: med detta alternativ vid uppdatering och vid DELETE-klausuler, om de refererade värdena i den överordnade tabellen tas bort eller ändras, är alla relaterade värden i den underordnade tabellen inställda till NULL-värde.,
  • SET DEFAULT: med alternativet SET DEFAULT i on UPDATE och on DELETE anger du att om de refererade värdena i den överordnade tabellen uppdateras eller tas bort kommer de relaterade värdena i den underordnade tabellen med utländska nyckelkolumner att ställas in till dess standardvärde.

Du kan lägga till begränsningen för utländsk nyckel medan du definierar kolumnen med hjälp av Create TABLE T-SQL-satsen, eller lägga till den efter tabellskapandet med hjälp av Alter TABLE T-SQL-satsen. Vi kommer att skapa två nya tabeller för att förstå funktionen för utländsk nyckelbegränsning., Den första tabellen fungerar som den överordnade tabellen med ID-kolumnen definierad som en primär NYCKELKOLUMN. Den andra tabellen kommer att fungera som underordnad tabell, med ID-kolumnen definierad som den främmande NYCKELKOLUMNEN som refererar till id-kolumnen i överordnad tabell.,> ID INT primärnyckel,

namn VARCHAR(50) NULL
)
GO
skapa TABELLBEGRÄNSNINGDEMOCHILD
(
CID INT primärnyckel,
id INT utländska NYCKELREFERENSER ConstraintDemoParent(ID)
)

När du har skapat de två tabellerna kommer vi att infoga tre poster i den överordnade tabellen och två poster i den underordnade tabellen med följande insert-satser:

resultatet visar att de tre posterna har infogats i den överordnade tabellen., Den första posten som vi försökte infoga i underordnade tabellen infogas utan något fel eftersom ID-värdet på 1 redan finns i överordnade tabellen.,eftersom ID-värdet för 4 inte finns i den överordnade tabellen och på grund av begränsningen för den utländska nyckeln, kommer du inte att kunna infoga ett ID-värde i den underordnade tabellen som inte finns i den överordnade tabellen:

kontrollera innehållet i överordnade tabeller och underordnade tabeller ser du att endast en post infogas i underordnade tabellen, som du kan se nedan:

eftersom vi inte nämnde det främmande NYCKELBEGRÄNSNINGSNAMNET när du skapade barntabellen kommer SQL Server att tilldela det ett unikt namn som vi kan hämta från information_schema.,TABLE_CONSTRAINTS system view using the following query:

1
2
3
4
5
6
7
8

SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,ONSTRAINTDEMOCHILD
Lägg till CONSTRAINT FK__ConstraintDe__ID
utländsk nyckel (ID) referenser ConstraintDemoParent(ID);

operationen kommer att misslyckas, eftersom ID-värdet på 4 inte finns i modertabellen och bryter referensintegriteten mellan huvudtabellen.underordnade och överordnade tabeller, som visas i följande felmeddelande:

för att kunna skapa den utländska nyckelbegränsningen i underordnade tabellen måste vi först eliminera den konflikten genom att radera eller uppdatera den posten., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., SET ID =2 WHERE ID = 4

nu kommer den utländska nyckelbegränsningen att skapas framgångsrikt utan något fel som visas nedan:

en utländsk nyckelbegränsning kan definieras med hjälp av SQL Server Management Studio verktyg. Högerklicka på önskad tabell och välj designalternativet.,> Från det visade fönstret kan du enkelt ange namnet på den utländska NYCKELBEGRÄNSNINGEN, tabellerna och kolumnerna som kommer att delta i det förhållandet, genom att klicka på tabellerna och Kolumnspecifikationen, om kontroll av befintliga data krävs och slutligen den åtgärd som utförs när den refererade posten raderas eller ändras på den överordnade tabellen, som visas nedan:

kontrollera begränsningen

en KONTROLLBEGRÄNSNING definieras på en kolumn eller uppsättning kolumner för att begränsa intervallet av värden, som kan infogas i dessa kolumner, med hjälp av ett fördefinierat villkor., KONTROLLBEGRÄNSNINGEN träder i kraft för att utvärdera de infogade eller modifierade värdena, där värdet som uppfyller villkoret kommer att införas i tabellen, annars kommer insatsen att kasseras. Det är tillåtet att ange flera KONTROLLBEGRÄNSNINGAR för samma kolumn.

att definiera KONTROLLBEGRÄNSNINGSFÖRHÅLLANDET liknar på något sätt att skriva WHERE-klausulen i en fråga, med hjälp av de olika jämförelseoperatörerna, till exempel och, eller mellan, i, SOM och är NULL för att skriva sitt booleska uttryck som kommer att returnera sant, falskt eller okänt., Kontrollbegränsningen kommer att returnera okänt värde när ett NULL-värde är närvarande i villkoret. Kontrollbegränsningen används främst för att upprätthålla domänintegriteten genom att begränsa de infogade värdena till de som följer de definierade värdena, intervallet eller formatreglerna.

låt oss skapa en ny enkel tabell som har tre kolumner; ID-kolumnen som anses vara den primära nyckeln i tabellen, namnet och lönen. En kontrollbegränsning definieras i Lönekolumnen för att se till att inga noll-eller negativa värden infogas i den kolumnen.,v>6

7
8
9
Skapa tabell ConstraintDemo4
(
id int primärnyckel,
namn Varchar(50) NULL,
lön INT CHECK (lön

div id=”8881573ac2″>

0)

)
Go

om du utför nedanstående tre insert-satser:

det framgår tydligt av det genererade resultatet att den första posten infogas utan fel eftersom det angivna LÖNEVÄRDET uppfyller kontrollvärdet.villkor.,rovided Lönvärden uppfyller inte KONTROLLBEGRÄNSNINGSFÖRHÅLLANDET på grund av att noll-och negativa Lönevärden infogas, vilket du kan se i följande felmeddelande:

Om du kontrollerar tabellens data visar det att endast den första raden som passerade KONTROLLBEGRÄNSNINGSFÖRHÅLLANDET infogas i tabellen enligt nedan:

vi nämnde tidigare i den här artikeln kan kontrollbegränsningen infoga null-värden om de deltagande kolumnerna tillåter null, och null-värdena utvärderas som okända utan att kasta något fel., Detta framgår av nedanstående post som infogas framgångsrikt, även om det angivna värdet för Lönekolumnen är NULL:

om du granskar definitionen av KONTROLLBEGRÄNSNINGAR i föregående skapa TABELLUTDRAG ser du att vi inte har nämnt namnet på den definierade begränsningen. I det här fallet kommer SQL Server tilldela ett unikt namn för den begränsningen som kan visas genom att fråga INFORMATION_SCHEMA.TABLE_CONSTRAINTS systemvy för ConstraintDemo4 tabellen., Resultatet kommer att vara som visas nedan:

KONTROLLBEGRÄNSNINGEN kan släppas med hjälp av Alter TABLE T-SQL-satsen.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:

1
2
3
4
5

ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);

Adding the CHECK constraint will fail., Detta beror på det faktum att, medan SQL Server kontrollerar redan befintliga data för KONTROLLBEGRÄNSNINGSFÖRHÅLLANDET, finns ett eller flera värden som inte uppfyller begränsningsförhållandet, som du kan se i följande felmeddelande:

för att kunna definiera KONTROLLBEGRÄNSNINGEN igen, bör vi ändra eller ta bort data som förhindrar att begränsningen skapas.,de484761″>

1
2
3
uppdatera ConstraintDemo4 ange lön =300 där ID i (2,3)

nu kan kontrollbegränsningen definieras utan problem som visas nedan:

SQL Server kan du inaktivera kontrollbegränsningen för speciella fall, till exempel att infoga stor mängd data utan att bry sig om att uppfylla begränsningsvillkoren för teständamål eller på grund av att du ändrar affärslogiken., Det här fallet gäller endast för de kontroll-och utländska nyckelbegränsningar som du kan inaktivera tillfälligt.,riting begränsningsnamnet, som i T-SQL-kommandot nedan:

1
2
3

från definitionen av kontrollbegränsning kan du ange att begränsningen kommer att skapas utan att kontrollera befintliga rader, men att begränsningen kommer att skapas.begränsningen kommer att markeras som inte betrodd., kan aktivera alla KONTROLLBEGRÄNSNINGAR, alla på en gång,med hjälp av T-SQL-kommandot nedan:

1
2
3

När du aktiverar föregående kontrollbegränsning kommer du att se att SQL Server inte kommer att klaga på de omarkerade data som inte är tillgängliga.bryter mot begränsningsförhållandet., I det här fallet upprätthålls inte dataens domänintegritet.

för att åtgärda problemet kan kommandot DBCC CHECKCONSTRAINTS enkelt användas för att identifiera data som bryter mot begränsningsförhållandet i en viss tabell eller begränsning, med hänsyn till att inte köra det kommandot under topptimmarna, eftersom det kommer att påverka SQL Server-prestanda på grund av att inte använda en databasbild.,v id=”ff419aa09d”>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

resultatet kommer att visa dig de två lönevärdena som bryter kontrollbegränsningen, som visas nedan:

en kontrollbegränsning kan också skapas med hjälp av SQL Server Management Studio-verktyget, genom att högerklicka på den önskade tabellen och välja designalternativet., Från det visade designfönstret högerklickar du på och väljer alternativet Kontrollera begränsningar enligt följande:

från fönstret kontrollera begränsningar kan du ange kontrollbegränsningens namn, uttryck och om du kontrollerar att befintliga data krävs, som visas nedan:

Standardbegränsning

en standardbegränsning är används för att ange ett standardkolumnvärde för de infogade raderna om inget värde anges för den kolumnen i INSERT-satsen., Standardbegränsningen hjälper till att upprätthålla domänintegriteten genom att tillhandahålla korrekta värden för kolumnen, om användaren inte ger ett värde för det. Standardvärdet kan vara ett konstant värde, ett systemfunktions värde eller NULL.,elow:

1
2
3
4

ändra tabell constraintdemo5
lägg till constraint DF__constrain__emplo default (getdate ())) för employeedate

också, den standardbegränsning kan definieras med hjälp av SQL Server Management Studio, genom att högerklicka på önskad tabell och välj designalternativ., Välj sedan kolumnen som du kommer att tilldela ett standardvärde för genom att bläddra i Kolumnegenskapsfönstret som visas nedan:

jag hoppades att den här artikeln och den föregående har hjälpt till att förklara de sex SQL Server-begränsningstyperna. Tveka inte att ställa några frågor i kommentarerna nedan.,NLY använda SQL Server begränsningar: inte NULL, unik och primär nyckel

användbara länkar

  • skapa kontrollera begränsningar
  • begränsningar
  • standard
  • skapa utländska Nyckel relationer
  • kontrollera begränsningar

  • författare
  • senaste inlägg
Ahmad Yaseen är en Microsoft Big Data Engineer med djup kunskap och erfarenhet inom SQL bi, SQL Server databasadministration och utvecklingsfält.,
Han är en Microsoft Certified Solution Expert på Hantering av Data och analyser, Microsoft Certified Solution Docent i SQL-Databas Administration och Utveckling, Azure Developer partner och Microsoft Certified Trainer.
han bidrar också med sina SQL-tips i många bloggar.,
Visa alla inlägg av Ahmad Yaseen

senaste inlägg av Ahmad Yaseen (se alla)
  • hur man övervakar Azure Data Factory – 15 januari 2021
  • använda källkontroll i Azure Data Factory – 12 januari 2021
  • använda mallar i Azure Data Factory – 12 januari 2021
  • använda mallar i Azure Factory-8 januari 2021


Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *