Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में PRIMARY KEY पर NOT NULL क्यों नहीं लिखना चाहिए?

MySQL में **प्राइमरी की (PRIMARY KEY) कॉलम पर NOT NULL लिखने की आवश्यकता नहीं है** क्योंकि प्राइमरी की परिभाषा में **अंतर्निहित रूप से NOT NULL शामिल होता है**।

कारण

प्राइमरी की = NOT NULL + UNIQUE का संयोजन है। MySQL स्वचालित रूप से प्राइमरी की कॉलम को NOT NULL बना देता है।

उदाहरण के साथ समझें

NOT NULL लिखे बिना प्राइमरी की बनाएं:

CREATE TABLE NotNullAddDemo (
    Id INT AUTO_INCREMENT,
    PRIMARY KEY(Id)
);

संरचना जांचें:

DESC NotNullAddDemo;

आउटपुट (Null = NO स्वचालित):

+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| Id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+

Null कॉलम में NO दिखाता है कि NOT NULL स्वचालित लागू है।

रोचक व्यवहार: NULL डालने पर

INSERT INTO NotNullAddDemo VALUES(NULL);
INSERT INTO NotNullAddDemo VALUES(NULL);

MySQL NULL को अगले ऑटो_इन्क्रीमेंट मान (1, 2) में बदल देता है।

अब 1 डालने का प्रयास:

INSERT INTO NotNullAddDemo VALUES(1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

क्योंकि पहला NULL → 1 बन गया था।

3 डालें - काम करेगा:

INSERT INTO NotNullAddDemo VALUES(3);
INSERT INTO NotNullAddDemo VALUES(NULL);  -- 4 बनेगा

अंतिम डेटा:

SELECT * FROM NotNullAddDemo;
+----+
| Id |
+----+
| 1  |
| 2  |
| 3  |
| 4  |
+----+

NOT NULL लिखने का प्रभाव

-- ये दोनों समान हैं:
CREATE TABLE t1 (id INT PRIMARY KEY);
CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY);

दोनों में id NOT NULL होगा। NOT NULL लिखना **रिडंडेंट (अतिरिक्त)** है लेकिन हानिकारक नहीं।

कब NOT NULL लिखना समझदारी है?

  • दस्तावेजीकरण: इरादा स्पष्ट करने के लिए (टीम कन्वेंशन)
  • नॉन-प्राइमरी की कॉलम: जो NOT NULL होने चाहिए
  • CHANGE COLUMN से कॉलम परिभाषा बदलते समय

नोट

  • यह व्यवहार सभी प्रमुख RDBMS में समान है (PostgreSQL, SQL Server, Oracle)
  • यूनिक कंस्ट्रेंट NULL अनुमति देता है (एकाधिक NULL), प्राइमरी की नहीं
  • SHOW CREATE TABLE में भी NOT NULL दिखेगा भले न लिखा हो
  1. - MySQL में प्राइमरी की कैसे ड्रॉप करें?

    प्राइमरी की ड्रॉप करने के लिए, पहले ALTER का उपयोग करके टेबल को बदलें। इसके साथ, नीचे दिखाए अनुसार की ड्रॉप करने के लिए DROP का उपयोग करें: सिंटैक्स alter table yourTableName drop primary key; आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> StudentId int NOT NULL, -> S

  1. - MySQL में NOT NULL मान के लिए 1 सेट करें

    MySQL में किसी कॉलम के NOT NULL मान होने पर 1 और NULL होने पर 0 लौटाने के लिए IF() फंक्शन के साथ IS NOT NULL ऑपरेटर का उपयोग करें। यह डेटा वैलिडेशन, रिपोर्टिंग, और कंडीशनल एग्रीगेशन के लिए उपयोगी है। बुनियादी सिंटैक्स SELECT IF( IS NOT NULL, 1, 0) AS anyAliasName; आउटपुट: 1 (क्योंकि खाली स्ट्रिंग N

  1. - MySQL में प्राइमरी की कैसे रीसेट करें?

    MySQL में ऑटो-इन्क्रीमेंट प्राइमरी की को रीसेट (1 से शुरू) करने के लिए, TRUNCATE TABLE का उपयोग करें जो डेटा हटाता है और ऑटो-इन्क्रीमेंट काउंटर रीसेट करता है, या ALTER TABLE से मैन्युअली सेट करें। विधि 1: TRUNCATE TABLE (सबसे सरल, डेटा हटाता है) टेबल बनाएं: mysql> CREATE TABLE DemoTable1929 (