Hur man använder MySQL -utländska nyckelbegränsningar

How Use Mysql Foreign Key Constraints



Den främmande nyckelbegränsningen används för att skapa en relation mellan två tabeller i MySQL -databasen. Det är en mycket viktig egenskap hos MySQL att ställa in olika typer av begränsningar på de relaterade tabellerna. För att definiera en begränsning av främmande nycklar för alla tabeller måste du använda huvudnyckeln i en annan tabell. Den primära nyckeln är en unik nyckel för en tabell för att identifiera den specifika raden i tabellen och när den här primära nyckeln används i en annan tabell för att skapa en-till-en eller en-till-många eller många-till-många-relation så är det kallas en främmande nyckel. Funktionerna i främmande nycklar och hur dessa nycklar kan användas i MySQL -tabeller visas i den här artikeln.

Funktioner i utländska nyckelbegränsningar:

Några viktiga funktioner i främmande nyckelbegränsning förklaras nedan.







  • Datatypen för den främmande nyckeln som används i den underordnade tabellen måste vara densamma som datatypen för den primära nyckeln som används i den överordnade tabellen för att hänvisa till den främmande nyckeln.
  • Alla indexkolumner eller flera kolumner kan refereras till som en främmande nyckel endast för InnoDB -tabellen.
  • Referenser eller åtminstone en av privilegierna för SELECT, INSERT, UPDATE och DELETE -satserna krävs för att skapa en främmande nyckel.
  • En främmande nyckel kan skapas på två sätt. En genom att använda CREATE -satsen och en annan med ALTER -satsen.

Nödvändig förutsättning:

Innan du skapar en begränsning för främmande nycklar måste du skapa en databas och överordnad tabell med huvudnyckeln. Antag att databasnamnet är ' bibliotek 'Och ​​den innehåller två överordnade tabeller med namnet' böcker 'Och' låntagare ’. Anslut med MySQL -servern med mysql klient och kör följande SQL -satser för att skapa databasen och tabellerna.



SKAPA DATABAS bibliotek;
ANVÄNDA SIG AV bibliotek;

SKAPA TABELL böcker(
id INT INTE NULL AUTO_INCREMENT ,
titel varchar (femtio) INTE NULL ,
författare varchar (femtio) INTE NULL ,
utgivare varchar (femtio) INTE NULL ,
PRIMÄRNYCKEL (id)
) MOTOR = INNODB ;

SKAPA TABELL låntagare(
id VARCHAR (femtio) INTE NULL ,
namn varchar (femtio) INTE NULL ,
adress varchar (femtio) INTE NULL ,
e-post varchar (femtio) INTE NULL ,
PRIMÄRNYCKEL (id)
) MOTOR = INNODB ;



Definiera begränsning av främmande nycklar med CREATE -uttalande

Skapa ett bord med namnet ‘ bok_lån_info ”Med främmande nyckelbegränsningar genom att köra följande uttalande. Här, bok_id fältet är ett främmande nyckel för denna tabell och varje värde i detta fält måste finnas i id fält av böcker tabell. böcker är moderbordet och bok_lån_info är barnbordet. Två begränsningar är också satta med den utländska nyckeln här. Dessa är DELETE CASCADE och UPPDATERA CASCADE . Det betyder att om någon primär nyckel kommer att ta bort eller uppdateras från den överordnade tabellen kommer motsvarande poster relaterade till underordnad tabell relaterad till den främmande nyckeln att tas bort eller den utländska nyckeln kommer att uppdateras.





SKAPA TABELL bok_lån_info(
låna_id VARCHAR (femtio),
bok_id INT ,
låna_datum DATUM INTE NULL ,
Återlämningsdatum DATUM INTE NULL ,
status VARCHAR (femton) INTE NULL ,
INDEX par_ind(bok_id),
PRIMÄRNYCKEL (låna_id,låna_datum),
FRÄMMANDE NYCKEL (bok_id) REFERENSER böcker(id)
RADERA KASKAD
UPPDATERING KASKAD
) MOTOR = INNODB ;

Kör nu följande SQL -satser för att infoga några poster i båda tabellerna. Den första INSERT -satsen kommer att infoga fyra poster i böcker tabell. De fyra värdena för id fält av böcker tabellen blir 1, 2, 3 och 4 för attributet auto-increment. Den andra INSERT -satsen kommer att infoga fyra poster i bok_lån_info baserat på id värdet av böcker tabell.



FÖRA IN IN I böcker VÄRDEN
( NULL , 'Att döda en hånfågel', 'Harper Lee', 'Grand Central Publishing'),
( NULL , 'Hundra år av ensamhet', 'Garcia Marquez', 'Lutfi Ozkok'),
( NULL , 'En passage till Indien', 'Forster, E.M.', 'BBC Hulton Picture Library'),
( NULL , 'Osynlig man', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

FÖRA IN IN I bok_lån_info VÄRDEN
('123490', 1, '2020-02-15', '2020-02-25', 'Returnerad'),
('157643', 2, '2020-03-31', '2020-03-10', 'I väntan på'),
('174562', 4, '2020-04-04', '2020-04-24', 'Lånad'),
('146788', 3, '2020-04-10', '2020-01-20', 'Lånad');

Om du försöker infoga ett värde i det främmande nyckelfältet i barntabellen som inte finns i huvudnyckelfältet i den överordnade tabellen kommer MySQL att generera ett fel. Följande SQL -sats genererar ett fel eftersom den överordnade tabellen, böcker innehåller inget id -värde 10 .

FÖRA IN IN I bok_lån_info VÄRDEN
('195684', 10, '2020-04-15', '2020-04-30', 'Returnerad');

Efter att ha utfört följande DELETE -sats, när den fjärde posten kommer att tas bort från böcker tabellen sedan de relaterade posterna från bok_lån_info tabellen kommer att tas bort automatiskt för begränsningen av främmande nycklar.

RADERA FRÅN böcker VAR id= 4;
VÄLJ * från böcker;
VÄLJ * från bok_lån_info;

Definiera begränsning av främmande nycklar med ALTER -uttalande

Först sätter du in några poster i låntagare tabell och denna tabell kommer att definieras som överordnad tabell i nästa ÅLDER påstående.

FÖRA IN IN I låntagare VÄRDEN
('123490', 'Patrick Wood', '34 West Street LANCASTER LA14 9ZH ', '[e -postskyddad]'),
('157643', 'Ezra Martin', '10 The Grove BIRMINGHAM B98 1EU ', '[e -postskyddad]'),
('174562', 'John Innes Archie', '55 Main Road LIVERPOOL L2 3OD ', '[e -postskyddad]'),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME ', '[e -postskyddad]');

Kör följande ÅLDER uttalande att ange en annan begränsning för utländsk nyckel för bok_lån_info bord att göra relationen med låntagare tabell. Här, låna_id definieras som en främmande nyckel för bok_lån_info tabell.

ALTER TABLE book_borrow_info ADD CONSTRAINT fk_borrower
FRÄMMANDE NYCKEL(låna_id)REFERENSER låntagare(id)OM RADERA KASKAD PÅ UPPDATERINGSBEGRÄNSNING;

Lägg nu in en post i bok_lån_info med giltig låna_id värde som finns i id fält av låntagare tabell. 157643 värde finns i låntagartabellen och följande INSERT -uttalande kommer att köras framgångsrikt.

FÖRA IN IN I bok_lån_info VÄRDEN
('157643', 1, '2020-03-10', '2020-03-20', 'Returnerad');

Följande INSERT -sats kommer att generera ett felmeddelande eftersom id -värdet 195680 finns inte i låntagarens tabell.

FÖRA IN IN I bok_lån_info VÄRDEN
('195680', 1, '2020-04-15', '2020-04-30', 'Returnerad');

Slutsats:

Att definiera främmande nyckelbegränsningar korrekt är en mycket viktig uppgift för att skapa en relationsdatabas och hantera data bland tabellerna på lämpligt sätt. Att känna till användningen av utländska nyckelbegränsningar är mycket viktigt för databasdesigners. Jag hoppas att den här artikeln kommer att hjälpa de nya databasdesignerna att förstå begreppet främmande nyckelbegränsningar och tillämpa dem korrekt i sina uppgifter.