दरअसल, विदेशी कुंजियाँ संदर्भात्मक अखंडता को लागू करती हैं जो हमें डेटा की स्थिरता और अखंडता को स्वचालित रूप से बनाए रखने में मदद करती हैं। इसे 'ग्राहक' और 'आदेश' नाम की दो तालिकाओं के उदाहरण से समझा जा सकता है। यहां, 'ग्राहक' मूल तालिका है और 'आदेश' चाइल्ड टेबल है। हम एक गैर-मौजूद ग्राहक के लिए ऑर्डर नहीं बना सकते। इसे दोनों तालिकाओं में निम्न प्रकार से मान डालकर प्रदर्शित किया जा सकता है -
mysql> Select * from Customer; +----+--------+ | id | name | +----+--------+ | 1 | Gaurav | | 2 | Raman | | 3 | Harshit| | 4 | Aarav | +----+--------+ 4 rows in set (0.00 sec) mysql> Select * from orders; +-----------+-------------+------+ | order_id | product | id | +-----------+-------------+------+ | 100 | Notebook | 1 | | 110 | Pen | 1 | | 120 | Book | 2 | | 130 | Charts | 2 | +-----------+-------------+------+ 4 rows in set (0.00 sec)
अब, मान लीजिए कि यदि हम एक गैर-मौजूदा ग्राहक के लिए 'आदेश' तालिका में मान डालने का प्रयास करेंगे (आईडी 10 'ग्राहक' तालिका में मौजूद नहीं है) तो MySQL एक त्रुटि फेंकता है जो विदेशी कुंजी बाधा की विफलता के कारण निम्नानुसार है ।
mysql> insert into orders values(400, 'Notebook',10); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`) REFERENCES `customer` (`id`))