फॉरेन की दो टेबल के बीच संबंध लागू करती है। यह एक टेबल के कॉलम को दूसरी टेबल के प्राइमरी की (या यूनिक कॉलम) से जोड़ती है।
संबंध प्रकार
- One-to-One: एक रिकॉर्ड दूसरी टेबल में ठीक एक रिकॉर्ड से जुड़ा होता है।
- One-to-Many: एक रिकॉर्ड दूसरी टेबल में कई रिकॉर्ड से जुड़ा होता है (सबसे आम)।
- Many-to-Many: जंक्शन टेबल के माध्यम से लागू होता है।
उदाहरण: One-to-Many (Parent-Child)
-- पैरेंट टेबल (Primary Key)
CREATE TABLE tblP (
FK_PK INT PRIMARY KEY,
LastName VARCHAR(100)
);
-- चाइल्ड टेबल (Foreign Key)
CREATE TABLE tblF (
id INT,
FirstName VARCHAR(100),
FK_PK INT
);
-- फॉरेन की जोड़ना
ALTER TABLE tblF
ADD CONSTRAINT ConstFK
FOREIGN KEY (FK_PK) REFERENCES tblP(FK_PK);
सत्यापन
mysql> DESC tblF;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| FirstName | varchar(100) | YES | | NULL | |
| FK_PK | int(11) | YES | MUL | NULL | | <-- MUL = इंडेक्स (FK)
+-----------+--------------+------+-----+---------+-------+
कैस्केड विकल्प
FOREIGN KEY (FK_PK) REFERENCES tblP(FK_PK)
ON DELETE CASCADE -- पैरेंट हटने पर चाइल्ड भी हटे
ON UPDATE CASCADE -- पैरेंट PK बदलने पर चाइल्ड FK अपडेट
-- अन्य: SET NULL, RESTRICT (डिफ़ॉल्ट), NO ACTION
महत्वपूर्ण नियम
- रेफरेंस्ड कॉलम इंडेक्स्ड होना चाहिए (प्राइमरी की या यूनिक)।
- डेटा टाइप सटीक मेल खाना चाहिए।
- दोनों टेबल समान इंजन (InnoDB) होने चाहिए।
- MyISAM फॉरेन की समर्थन नहीं करता।
फॉरेन की देखना
SHOW CREATE TABLE tblF;
-- या
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'tblF' AND CONSTRAINT_NAME != 'PRIMARY';