Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
MySQL + SQL · Lesson 18

Primary Key और Foreign Key

Keys क्यों होती हैं

Database शायद ही कभी एक बड़ी table होती है। असली जानकारी कई tables में बँटी होती है — students, courses, teachers, orders — और उन tables को एक-दूसरे से भरोसे के साथ जुड़ना होता है। Keys वही जुड़ाव सुरक्षित बनाती हैं। keys के बिना database सिर्फ़ बिखरी spreadsheet है; keys के साथ यह एक जुड़ा, भरोसेमंद system बन जाता है।

दो keys हैं जिन्हें आपको पहले समझना चाहिए। एक primary key एक table के भीतर बताती है "यह ठीक कौन-सी row है?"। एक foreign key बताती है "यह दूसरी table की कौन-सी row से जुड़ी है?"। मिलकर ये अलग tables को एक जुड़े पूरे में बदल देती हैं जहाँ रिश्ते टूट नहीं सकते।

💡 Note

Primary key को किसी व्यक्ति के unique ID number की तरह सोचिए, और foreign key को उसी ID number को किसी form पर लिखने की तरह जो कहे "यह form उस व्यक्ति का है"।

Primary key: row की पहचान

Primary key एक ऐसा column है जिसकी value हर row के लिए अलग होती है और कभी खाली नहीं होती। यह वह भरोसेमंद पकड़ है जिससे आप किसी एक ख़ास row को ढूँढते, update या delete करते हैं।

MySQL
CREATE TABLE customers (
    id   INT PRIMARY KEY,
    name VARCHAR(50)
);

INSERT INTO customers VALUES (1, 'Aarav'), (2, 'Diya');
INSERT INTO customers VALUES (1, 'Kabir');  -- fail, id 1 मौजूद है
Output:
ERROR 1062 (23000): Duplicate entry '1' for key 'customers.PRIMARY'

MySQL ने तीसरी row ठुकरा दी क्योंकि id 1 पहले से इस्तेमाल है। यही गारंटी — हर id unique और मौजूद — दूसरी tables को सुरक्षित रूप से किसी customer की ओर id से इशारा करने देती है।

Foreign key: tables जोड़ना

Foreign key एक table का वह column है जिसे दूसरी table की किसी primary key value से मेल खाना ज़रूरी है। यह दोनों के बीच link बनाती और उसकी रक्षा करती है।

MySQL
CREATE TABLE orders (
    order_id    INT PRIMARY KEY,
    customer_id INT,
    amount      DECIMAL(8,2),
    FOREIGN KEY (customer_id) REFERENCES customers(id)
);

यहाँ orders में customer_id एक foreign key है। इसे ऐसी id रखनी होगी जो customers में पहले से मौजूद हो। यह एक line bugs की पूरी श्रेणी रोक देती है — आप कभी ऐसे customer के लिए order नहीं बना सकते जो है ही नहीं।

दोनों keys को साथ काम करते देखना

सही और ग़लत data insert करके रिश्ते को लागू होते देखिए।

MySQL
INSERT INTO orders VALUES (101, 1, 500.00);   -- ठीक, customer 1 मौजूद
INSERT INTO orders VALUES (102, 9, 300.00);   -- fail, customer 9 नहीं
Output:
Row 101 inserted.
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

पहला order मौजूद customer से साफ़ जुड़ा। दूसरा रुक गया क्योंकि customer 9, customers में नहीं है। primary key ने customer 1 को खोजने योग्य बनाया; foreign key ने link को भरोसेमंद बनाया।

ON DELETE और ON UPDATE

जब customer delete हो तो orders का क्या हो? आप ON DELETE नियमों से तय करते हैं।

विकल्पParent delete होने पर असर
RESTRICT (default)अगर child rows हैं तो delete रोक देता है
CASCADEchild rows भी delete कर देता है
SET NULLchild foreign key को NULL कर देता है
MySQL
CREATE TABLE orders (
    order_id    INT PRIMARY KEY,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES customers(id)
        ON DELETE CASCADE
);

ON DELETE CASCADE के साथ, customer 1 को delete करने से उसके सभी order अपने-आप delete हो जाते हैं। शक्तिशाली, पर सोच-समझकर इस्तेमाल कीजिए — deletion child tables तक फैलता है।

🏋️ Practice

एक students और marks जोड़ी बनाइए जहाँ marks.student_id, students.id की foreign key हो ON DELETE CASCADE के साथ। एक student और दो marks insert कीजिए, फिर student delete कीजिए। हर table में कितनी rows बचीं?

Primary key बनाम foreign key

पहलूPrimary keyForeign key
उद्देश्यrow पहचाननादूसरी table से जोड़ना
NULL की अनुमति?कभी नहींहाँ (जब तक NOT NULL न हो)
प्रति table कितनीठीक एककई हो सकती हैं
Duplicate valueअनुमति नहींअनुमति है

अंतर पकड़ने का सबसे साफ़ तरीक़ा: primary key row की अपनी पहचान है, जबकि foreign key किसी दूसरी row की पहचान का reference है।

आम गलतियाँ

  • मेल न खाते data type। foreign key और जिस primary key की ओर यह इशारा करती है, दोनों एक type के हों, वरना MySQL link ठुकरा देता है।
  • Parent से पहले child insert करना। Parent row पहले मौजूद होनी चाहिए, वरना foreign key जाँच fail होती है।
  • यह भूलना कि parent का column key होना चाहिए। Foreign key सिर्फ़ primary key या unique column को reference कर सकती है, किसी भी random column को नहीं।
  • बिना सोचे CASCADE इस्तेमाल करना। अगर रिश्ते श्रृंखला में जुड़े हों तो यह आपकी सोच से कहीं ज़्यादा delete कर सकता है।

सारांश

  • Primary key हर row को विशिष्ट पहचानती है और कभी NULL नहीं — प्रति table एक।
  • Foreign key दूसरी table की primary key से जोड़ती है — प्रति table कई।
  • Foreign key orphan row रोकती है और रिश्ते अपने-आप मान्य रखती है।
  • ON DELETE CASCADE / SET NULL / RESTRICT तय करते हैं child rows का क्या हो।
  • दोनों column का data type मेल खाता होना चाहिए।

आगे, इन columns को नियमों से सुरक्षित कीजिए constraints in MySQL में, या अपनी tables साफ़-सुथरी व्यवस्थित कीजिए normalization in DBMS से।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

Primary key और foreign key में मुख्य अंतर क्या है?
Primary key अपनी table के भीतर हर row को विशिष्ट रूप से पहचानती है और कभी NULL नहीं हो सकती। Foreign key दूसरी table में बैठती है और पहली table की primary key की ओर इशारा करती है, जिससे दोनों के बीच link बनता है। संक्षेप में: primary key पहचान के बारे में है, foreign key रिश्ते के बारे में।
क्या एक table में एक से ज़्यादा foreign key हो सकती हैं?
हाँ। एक table में कई foreign key हो सकती हैं, हर एक अलग parent table की ओर इशारा करती हुई। जैसे एक orders table में एक foreign key customers की ओर और दूसरी products की ओर हो सकती है। पर एक table में सिर्फ़ एक primary key हो सकती है।
क्या foreign key उसी table को reference कर सकती है?
हाँ, इसे self-referencing foreign key कहते हैं। एक आम उदाहरण है employees table जहाँ manager_id column एक foreign key है जो उसी employees table के id column की ओर इशारा करता है, जिससे हर employee अपने manager की ओर इशारा कर सके।
ON DELETE CASCADE क्या करता है?
ON DELETE CASCADE का मतलब है कि जब parent row delete होती है, तो उसकी ओर इशारा करने वाली सभी child rows भी अपने-आप delete हो जाती हैं। जैसे किसी customer को delete करने से उस customer के सभी order delete हो जाएँगे। यह data संगत रखता है पर सावधानी से इस्तेमाल करना चाहिए क्योंकि deletion फैलता है।
क्या primary key और foreign key column का data type एक होना चाहिए?
हाँ। foreign key column और जिस primary key को यह reference करती है, दोनों के data type मेल खाते होने चाहिए (जैसे दोनों INT)। अगर अलग हों, तो MySQL foreign key रिश्ता बनाने से मना कर देता है।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicCandidate Key, Super Key और Alternate Key आपकी प्रगति: 18 / 151 (12%) · Lesson 19 / 151 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें