एसक्यूएल विदेशी कुंजी बाधा
एसक्यूएल विदेशी कुंजी बाधा
बाधाओं का FOREIGN KEY
उपयोग उन क्रियाओं को रोकने के लिए किया जाता है जो तालिकाओं के बीच के लिंक को नष्ट कर देती हैं।
A FOREIGN KEY
एक तालिका में एक फ़ील्ड (या फ़ील्ड का संग्रह) है, जो PRIMARY KEY
किसी अन्य तालिका में संदर्भित करता है।
विदेशी कुंजी वाली तालिका को चाइल्ड टेबल कहा जाता है, और प्राथमिक कुंजी वाली तालिका को संदर्भित या मूल तालिका कहा जाता है।
निम्नलिखित दो तालिकाओं को देखें:
व्यक्तियों की तालिका
PersonID | LastName | FirstName | Age |
---|---|---|---|
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
आदेश तालिका
OrderID | OrderNumber | PersonID |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
ध्यान दें कि "आदेश" तालिका में "व्यक्ति आईडी" कॉलम "व्यक्ति" तालिका में "व्यक्ति आईडी" कॉलम को इंगित करता है।
"व्यक्ति" तालिका में "व्यक्ति आईडी" कॉलम "व्यक्ति" तालिका में है PRIMARY KEY
।
"आदेश" तालिका में "व्यक्ति आईडी" कॉलम "आदेश" तालिका में है
FOREIGN KEY
।
बाधा अमान्य डेटा को FOREIGN KEY
विदेशी कुंजी कॉलम में डालने से रोकती है, क्योंकि इसे मूल तालिका में निहित मानों में से एक होना चाहिए।
तालिका बनाने पर SQL विदेशी कुंजी
जब "आदेश" तालिका बनाई जाती है, तो निम्न SQL FOREIGN KEY
"PersonID" कॉलम पर बनाता है:
माई एसक्यूएल:
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
एसक्यूएल सर्वर/ओरेकल/एमएस एक्सेस:
CREATE TABLE Orders
(
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
एक बाधा के नामकरण की अनुमति देने के लिए, और एक से अधिक स्तंभों पर FOREIGN KEY
एक बाधा को परिभाषित करने के लिए, निम्न SQL सिंटैक्स का उपयोग करें:
FOREIGN KEY
MySQL / SQL सर्वर / Oracle / MS एक्सेस:
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
वैकल्पिक तालिका पर SQL विदेशी कुंजी
FOREIGN KEY
जब "आदेश" तालिका पहले से ही बनाई गई हो, तो "पर्सनआईडी" कॉलम पर एक बाधा बनाने के लिए, निम्नलिखित एसक्यूएल का उपयोग करें:
MySQL / SQL सर्वर / Oracle / MS एक्सेस:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
एक बाधा के नामकरण की अनुमति देने के लिए, और एक से अधिक स्तंभों पर FOREIGN KEY
एक बाधा को परिभाषित करने के लिए, निम्न SQL सिंटैक्स का उपयोग करें:
FOREIGN KEY
MySQL / SQL सर्वर / Oracle / MS एक्सेस:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
एक विदेशी कुंजी बाधा छोड़ें
FOREIGN KEY
एक बाधा छोड़ने के लिए, निम्न SQL का उपयोग करें:
माई एसक्यूएल:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
एसक्यूएल सर्वर/ओरेकल/एमएस एक्सेस:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;