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

MySQL में Constraints

Constraint असल में क्या है

Constraint एक नियम है जो आप column पर लगाते हैं ताकि MySQL ख़ुद ग़लत data रखने से मना कर दे। इसे हर column पर खड़े एक security guard की तरह सोचिए: कोई भी value अंदर आने से पहले guard उसे नियम से जाँचता है। अगर value नियम तोड़ती है, तो पूरा insert error के साथ लौटा दिया जाता है।

यह क्यों ज़रूरी है? क्योंकि असली project में data form, import और दूसरे program से आता है — आप हर value ख़ुद जाँच नहीं सकते। Constraints उस जाँच को database के अंदर ले जाते हैं, जहाँ इसे कभी छोड़ा या भुलाया नहीं जा सकता। fee कभी negative नहीं हो सकती, email कभी दोहरा नहीं सकता, student row कभी roll number के बिना नहीं बन सकती। नियम हर बार, अपने-आप लागू होता है।

💡 Note

MySQL में छह constraints हैं जो आप लगातार इस्तेमाल करेंगे: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK और DEFAULT। हर एक क्या रोकता है यह सीख लें, तो लगभग हर असली table का नियम आप संभाल लेंगे।

NOT NULL - खाली value नहीं

NOT NULL column को हमेशा कोई value रखने पर मजबूर करता है। इसके बिना column खाली (NULL) छोड़ा जा सकता है, जो बाद में गणना या comparison के समय अक्सर bug पैदा करता है।

MySQL
CREATE TABLE students (
    roll_no INT NOT NULL,
    name    VARCHAR(50) NOT NULL
);

-- name गायब होने से यह fail होगा:
INSERT INTO students (roll_no) VALUES (1);
Output:
ERROR 1364 (HY000): Field 'name' doesn't have a default value

MySQL ने row रोक दी क्योंकि name ज़रूरी है। वह error constraint का काम कर रहा है — इसने अधूरे record को table में आने से पहले ही रोक दिया।

UNIQUE - कोई duplicate नहीं

UNIQUE यह पक्का करता है कि उस column में दो row एक ही value न रखें। यह email, phone number या admission number जैसी चीज़ों के लिए बिल्कुल सही है, जहाँ दोहराव गलती होगी।

MySQL
CREATE TABLE users (
    id    INT,
    email VARCHAR(80) UNIQUE
);

INSERT INTO users VALUES (1, 'a@site.com');
INSERT INTO users VALUES (2, 'a@site.com');  -- duplicate!
Output:
ERROR 1062 (23000): Duplicate entry 'a@site.com' for key 'users.email'

दूसरा insert उसी क्षण fail हो गया जब उसने email दोहराने की कोशिश की। आपको ख़ुद duplicate जाँचने की ज़रूरत नहीं पड़ी — database ने इसकी गारंटी दी।

PRIMARY KEY - row की पहचान

PRIMARY KEY वह एक column (या columns का समूह) है जो हर row को विशिष्ट रूप से पहचानता है। यह असल में दो नियम एक में है: UNIQUE + NOT NULL। हर table में ठीक एक होनी चाहिए।

MySQL
CREATE TABLE books (
    book_id INT PRIMARY KEY,
    title   VARCHAR(100)
);

अब book_id कभी खाली नहीं हो सकती और कभी दोहरा नहीं सकती। यह वह भरोसेमंद पकड़ बन जाती है जिससे आप किसी ख़ास book को ढूँढते, update करते या जोड़ते हैं। identity column tables को कैसे जोड़ते हैं यह पढ़ने के लिए देखिए primary और foreign key।

FOREIGN KEY - tables जोड़ना

FOREIGN KEY एक table को दूसरी से जोड़ता है। यह कहता है: इस column की value parent table में पहले से मौजूद होनी चाहिए। यही "orphan" row रोकता है, जैसे कोई order जो ऐसे customer की ओर इशारा करे जो है ही नहीं।

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

-- अगर customer 99 customers में नहीं है तो fail:
INSERT INTO orders VALUES (1, 99);
Output:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

MySQL ने ऐसे customer के लिए order बनाने से मना कर दिया जो customers table में नहीं है। दोनों tables के बीच का link अपने-आप सुरक्षित रहता है।

CHECK और DEFAULT

CHECK value पर एक शर्त लागू करता है, और DEFAULT तब value देता है जब कोई न दिया गया हो।

MySQL
CREATE TABLE products (
    id    INT PRIMARY KEY,
    price DECIMAL(8,2) CHECK (price >= 0),
    stock INT DEFAULT 0
);

INSERT INTO products (id, price) VALUES (1, 250.00);
INSERT INTO products (id, price) VALUES (2, -5.00);  -- CHECK fail
Output:
ERROR 3819 (HY000): Check constraint 'products_chk_1' is violated.

पहली row चली और उसका stock 0 पर default हो गया। दूसरी row रुक गई क्योंकि negative price CHECK नियम तोड़ती है। दो constraints, चुपचाप साथ काम करते हुए।

सभी constraints के साथ पूरा उदाहरण

यहाँ एक table है जो एक साथ हर constraint इस्तेमाल करती है, ताकि आप देख सकें कि असली code में ये कैसे मिलते हैं।

MySQL
CREATE TABLE admissions (
    adm_no   INT PRIMARY KEY,                 -- UNIQUE + NOT NULL
    email    VARCHAR(80) UNIQUE NOT NULL,     -- न दोहराव, न खाली
    class_id INT,
    fees     DECIMAL(10,2) CHECK (fees >= 0), -- कभी negative नहीं
    status   VARCHAR(10) DEFAULT 'active',    -- auto value
    FOREIGN KEY (class_id) REFERENCES classes(id)
);

इसे ऊपर से नीचे पढ़िए और हर line आपको बताती है कि data को कौन-सा नियम मानना है। जो कोई बाद में यह table definition पढ़े उसे तुरंत data का आकार और सीमाएँ समझ आ जाती हैं — यह constraints का दूसरा, छिपा हुआ फ़ायदा है।

🏋️ Practice

एक employees table बनाइए जहाँ id primary key हो, email unique व ज़रूरी हो, salary कभी 10000 से कम न हो (CHECK), और एक "department" column का default 'General' हो। फिर salary 5000 वाली row insert करने की कोशिश कीजिए और देखिए constraint उसे कैसे रोकता है।

आम गलतियाँ

  • पुराने MySQL पर CHECK के काम करने की उम्मीद। 8.0.16 से पहले यह चुपचाप अनदेखा होता था। अगर CHECK नियम कुछ न करता दिखे तो अपना version जाँचिए।
  • गंदे data पर UNIQUE constraint जोड़ना। अगर duplicate पहले से हैं, तो ALTER TABLE उन्हें हटाने तक मना करेगा।
  • यह भूलना कि foreign key को मेल खाते data type चाहिए। child और parent column एक ही type के होने चाहिए, वरना MySQL foreign key ठुकरा देता है।
  • NULL को 0 या खाली string समझना। NOT NULL, NULL रोकता है, पर तब भी खाली string '' या 0 आने देता है - ज़्यादा चाहिए तो CHECK जोड़िए।

सारांश

  • Constraints वे नियम हैं जो MySQL लागू करता है ताकि ग़लत data कभी न रखा जाए।
  • NOT NULL value ज़रूरी करता है; UNIQUE duplicate रोकता है।
  • PRIMARY KEY = UNIQUE + NOT NULL और हर row को पहचानती है।
  • FOREIGN KEY tables जोड़ती है और orphan row रोकती है।
  • CHECK शर्त लागू करता है (MySQL 8.0.16+); DEFAULT value भर देता है।

आगे, पहचान के नियमों का फ़र्क विस्तार से समझिए NOT NULL, UNIQUE, CHECK और DEFAULT में, या पहले सही column type चुनिए MySQL data types में।

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

UNIQUE और PRIMARY KEY में क्या अंतर है?
दोनों duplicate रोकते हैं, पर एक table में सिर्फ़ एक PRIMARY KEY हो सकती है और वह कभी NULL नहीं हो सकती। UNIQUE column कई हो सकते हैं, और MySQL में एक UNIQUE column एक NULL रख सकता है। primary key row की मुख्य पहचान है; UNIQUE सिर्फ़ email जैसे अतिरिक्त column को दोहराने से बचाता है।
क्या MySQL में CHECK constraint सच में काम करता है?
हाँ, MySQL 8.0.16 से CHECK पूरी तरह लागू होता है। उस version से पहले MySQL CHECK को पढ़ता तो था पर अनदेखा कर देता था, इसलिए पुराने tutorial कहते हैं कि यह कुछ नहीं करता। MySQL 8.0.16+ पर शर्त तोड़ने वाली row error के साथ रुक जाती है।
क्या foreign key column NULL हो सकता है?
हाँ, जब तक आप उसमें NOT NULL न जोड़ें। NULL foreign key का मतलब है "अभी किसी parent row से नहीं जुड़ा", जो optional रिश्तों के लिए उपयोगी है। पर अगर value मौजूद है, तो उसे parent table की किसी मौजूदा value से मेल खाना होगा, वरना insert fail होगा।
UNIQUE column में duplicate डालने पर क्या होता है?
MySQL उस row को "Duplicate entry" error के साथ रोक देता है और insert नहीं होता। यही constraint का मक़सद है - यह आपके data को अपने-आप बचाता है, आपके पहले जाँचने के भरोसे नहीं रहता।
क्या पहले से बनी table में constraint जोड़ सकते हैं?
हाँ। ALTER TABLE इस्तेमाल कीजिए, जैसे ALTER TABLE students ADD CONSTRAINT uq_email UNIQUE (email);। पेच यह है कि अगर मौजूदा data पहले से नियम तोड़ता है (जैसे duplicate email), तो data साफ़ करने तक MySQL constraint जोड़ने से मना कर देगा।
🔗

Share this topic with a friend

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

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

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

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

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicNOT NULL, UNIQUE, CHECK और DEFAULT आपकी प्रगति: 39 / 151 (26%) · Lesson 40 / 151 आगे बढ़ें →

यह lesson कैसा लगा?

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

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

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

▶ CodingEasily on YouTube

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

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

▶ Channel subscribe करें