इसके साथ कोई समस्या नहीं होनी चाहिए।
CREATE TABLE table2 (
id int PRIMARY KEY,
name varchar(20)
) ENGINE=INNODB;
CREATE TABLE table1 (
id int PRIMARY KEY,
t2_id int,
FOREIGN KEY (t2_id) REFERENCES table2 (id)
) ENGINE=INNODB;
INSERT INTO table2 VALUES (1, 'First Row');
INSERT INTO table2 VALUES (2, 'Second Row');
INSERT INTO table1 VALUES (1, 1);
INSERT INTO table1 VALUES (2, 1);
INSERT INTO table1 VALUES (3, 1);
INSERT INTO table1 VALUES (4, 2);
टेबल अब शामिल:
SELECT * FROM table1;
+----+-------+
| id | t2_id |
+----+-------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
+----+-------+
4 rows in set (0.00 sec)
SELECT * FROM table2;
+----+------------+
| id | name |
+----+------------+
| 1 | First Row |
| 2 | Second Row |
+----+------------+
2 rows in set (0.00 sec)
अब हम सफलतापूर्वक पंक्तियों इस तरह नष्ट कर सकते हैं:
DELETE FROM table1 WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
DELETE FROM table1 WHERE t2_id = 2;
Query OK, 1 row affected (0.00 sec)
लेकिन हम नष्ट करने के लिए सक्षम नहीं होगा निम्नलिखित उदाहरण पर विचार निम्नलिखित:
DELETE FROM table2 WHERE id = 1;
ERROR 1451 (23000): A foreign key constraint fails
अगर हम CASCADE
विकल्प के साथ table1
पर विदेशी कुंजी परिभाषित किया था, हम माता पिता को नष्ट करने में सक्षम हो गया होता, और सभी बच्चों को अपने आप ही हट जायेगा:
CREATE TABLE table2 (
id int PRIMARY KEY,
name varchar(20)
) ENGINE=INNODB;
CREATE TABLE table1 (
id int PRIMARY KEY,
t2_id int,
FOREIGN KEY (t2_id) REFERENCES table2 (id) ON DELETE CASCADE
) ENGINE=INNODB;
INSERT INTO table2 VALUES (1, 'First Row');
INSERT INTO table2 VALUES (2, 'Second Row');
INSERT INTO table1 VALUES (1, 1);
INSERT INTO table1 VALUES (2, 1);
INSERT INTO table1 VALUES (3, 1);
INSERT INTO table1 VALUES (4, 2);
हम दोहराने के लिए थे, तो पहले से DELETE
में विफल रहा है , table1
में बच्चों पंक्तियों table2
में माता-पिता पंक्ति के रूप में रूप में अच्छी तरह से हटा दिया जाएगा:
DELETE FROM table2 WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
SELECT * FROM table1;
+----+-------+
| id | t2_id |
+----+-------+
| 4 | 2 |
+----+-------+
1 row in set (0.00 sec)
SELECT * FROM table2;
+----+------------+
| id | name |
+----+------------+
| 2 | Second Row |
+----+------------+
1 row in set (0.00 sec)
आप 'करूँगा इस लिंक में जवाब खोजने [कर सकते हैं एक डेटाबेस विशेषता प्राथमिक और विदेशी कुंजी हो?] (http://stackoverflow.com/questions/9244432/can-a-database-attribute-be-primary-and-foreign-key) –