SQL में विदेशी कुंजी कैसे जोड़ें
विदेशी कुंजी एक विशेषता या विशेषताओं का एक समूह है जो एक ही तालिका या किसी अन्य तालिका (संबंध) की प्राथमिक कुंजी का संदर्भ देता है।
- तालिका निर्माण के साथ-साथ विदेशी कुंजी निर्माण
टेबल बनाते समय भी एक विदेशी कुंजी बनाई जा सकती है।
वाक्यविन्यास:
CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));
उदाहरण:
सबसे पहले, हम “कर्मचारी . नाम से एक डेटाबेस तैयार करेंगे " फिर उस डेटाबेस में हम दो टेबल "कर्मचारी" और "विभाग" बनाएंगे। हम बाद के सभी उदाहरणों के लिए इन तालिकाओं और डेटाबेस पर विचार करेंगे।
हम क्रमशः "कर्मचारी" और "विभाग" तालिकाएँ बनाते समय एक प्राथमिक कुंजी और विदेशी कुंजी बनाएंगे।
mysql> USE employeedb; Database changed mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Query OK, 0 rows affected (0.07 sec) mysql> DESC employee; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | Emp_ID | int(11) | NO | PRI | NULL | | | Emp_Name | varchar(40) | YES | | NULL | | | Emp_Salary | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.09 sec) mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID)); Query OK, 0 rows affected (0.20 sec) mysql> DESC department; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | Dept_ID | int(11) | NO | PRI | NULL | | | Dept_Name | varchar(40) | YES | | NULL | | | Emp_ID | int(11) | NO | MUL | NULL | | +-----------+-------------+------+-----+---------+-------+ 3 rows in set (0.02 sec)
हमने टेबल बनाते समय "कर्मचारी" तालिका में दो प्राथमिक कुंजी "Emp_ID", "Dept_ID" से "विभाग" तालिका और "Emp_ID" को "विभाग" तालिका के लिए एक विदेशी कुंजी के रूप में बनाया है। यह सत्यापित करने के लिए कि कुंजियों को तालिकाओं में जोड़ा गया है या नहीं, हमने DESC कमांड का उपयोग किया है।
- बाधा नाम के साथ विदेशी कुंजी निर्माण
बाधा नाम के साथ टेबल बनाते समय भी एक विदेशी कुंजी बनाई जा सकती है। पूरी तालिका को छोड़े बिना तालिका से विदेशी कुंजी छोड़ते समय यह बाधा नाम उपयोगी होगा।
वाक्यविन्यास:
CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), CONSTRAINT ConstraintName FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));
उदाहरण:
हम क्रमशः "कर्मचारी" और "विभाग" तालिकाएँ बनाते समय एक प्राथमिक कुंजी और विदेशी कुंजी बनाएंगे। तालिका बनाते समय विदेशी कुंजी बाधा के साथ विदेशी कुंजी भी बनाई जाएगी।
mysql> USE employeedb; Database changed mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Query OK, 0 rows affected (0.11 sec) mysql> DESC employee; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | Emp_ID | int(11) | NO | PRI | NULL | | | Emp_Name | varchar(40) | YES | | NULL | | | Emp_Salary | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec) mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, CONSTRAINT emp_id_fk FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID)); Query OK, 0 rows affected (0.25 sec) mysql> DESC department; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | Dept_ID | int(11) | NO | PRI | NULL | | | Dept_Name | varchar(40) | YES | | NULL | | | Emp_ID | int(11) | NO | MUL | NULL | | +-----------+-------------+------+-----+---------+-------+ 3 rows in set (0.04 sec)
हमने टेबल बनाते समय "कर्मचारी" तालिका में दो प्राथमिक कुंजी "Emp_ID", "Dept_ID" से "विभाग" तालिका और "Emp_ID" को "विभाग" तालिका के लिए एक विदेशी कुंजी के रूप में बनाया है। यहां, हमने "emp_id_fk" नामक विदेशी कुंजी बाधा भी जोड़ी है। यह सत्यापित करने के लिए कि कुंजियों को तालिकाओं में जोड़ा गया है या नहीं, हमने DESC कमांड का उपयोग किया है।
- ALTER आदेश का उपयोग करके विदेशी कुंजी बनाना
तालिका निर्माण के बाद भी विदेशी कुंजी बनाना संभव है। तालिका बनाते समय यदि हमने इसमें कोई विदेशी कुंजी नहीं जोड़ी है और उसके बाद हमें किसी मौजूदा तालिका में विदेशी कुंजी जोड़ने की आवश्यकता है तो हम उस स्थिति में ALTER कमांड का उपयोग करेंगे।
वाक्यविन्यास:
ALTER TABLE Parent_TableName ADD FOREIGN KEY(ColumnName) REFERENCES Child_TableName(ColumnName);
उदाहरण:
हम ALTER कमांड का उपयोग करके मौजूदा तालिका में एक विदेशी कुंजी जोड़ेंगे।
mysql> USE employeedb; Database changed mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Query OK, 0 rows affected (0.16 sec) mysql> DESC employee; +------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | Emp_ID | int(11) | NO | PRI | NULL | auto_increment | | Emp_Name | varchar(40) | YES | | NULL | | | Emp_Salary | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec) mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL); Query OK, 0 rows affected (0.12 sec) mysql> ALTER TABLE department ADD FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID); Query OK, 0 rows affected (0.23 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC department; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | Dept_ID | int(11) | NO | PRI | NULL | auto_increment | | Dept_Name | varchar(40) | YES | | NULL | | | Emp_ID | int(11) | NO | MUL | NULL | | +-----------+-------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec)
हमने टेबल बनाते समय "कर्मचारी" तालिका में दो प्राथमिक कुंजी "Emp_ID" और "Dept_ID" से "विभाग" तालिका बनाई है। फिर ALTER कमांड का उपयोग करके हमने विभाग तालिका में विदेशी कुंजी के रूप में "Emp_ID" जोड़ा है। यह सत्यापित करने के लिए कि कुंजियों को तालिकाओं में जोड़ा गया है या नहीं, हमने DESC कमांड का उपयोग किया है।