MySQL में मौजूदा कॉलम को NOT NULL बनाना
मौजूदा कॉलम पर NOT NULL प्रतिबंध जोड़ने के लिए, ALTER TABLE ... MODIFY स्टेटमेंट का उपयोग करें जिसमें कॉलम परिभाषा में NOT NULL शामिल हो।
टेबल बनाना
mysql> CREATE TABLE DemoTable1949 (
-> UserId INT,
-> UserName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.00 sec)
UserName पर NOT NULL प्रतिबंध जोड़ना
mysql> ALTER TABLE DemoTable1949
-> MODIFY UserName VARCHAR(20) NOT NULL;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
टेबल संरचना सत्यापित करना
mysql> DESC DemoTable1949;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| UserId | int(11) | YES | | NULL | |
| UserName | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Null कॉलम अब UserName के लिए NO दिखाता है।
प्रतिबंध का परीक्षण
-- NULL डालने का प्रयास - विफल होगा
mysql> INSERT INTO DemoTable1949 VALUES (101, NULL);
ERROR 1048 (23000): Column 'UserName' cannot be null
-- वैध मान डालना - सफल
mysql> INSERT INTO DemoTable1949 VALUES (101, 'Chris');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1949 VALUES (102, 'Bob');
Query OK, 1 row affected (0.00 sec)
डेटा सत्यापित करना
mysql> SELECT * FROM DemoTable1949;
+--------+----------+
| UserId | UserName |
+--------+----------+
| 101 | Chris |
| 102 | Bob |
+--------+----------+
2 rows in set (0.00 sec)
महत्वपूर्ण विचार
मौजूदा NULL मान
यदि टेबल में पहले से NULL मान हैं, तो ALTER TABLE विफल होगा:
ERROR 1138 (HY000): Invalid use of NULL value
समाधान: पहले NULL मानों को अपडेट करें:
UPDATE DemoTable1949 SET UserName = 'Unknown' WHERE UserName IS NULL;
ALTER TABLE DemoTable1949 MODIFY UserName VARCHAR(20) NOT NULL;
पूर्ण सिंटैक्स विकल्प
-- कॉलम परिभाषा दोहरानी होगी
ALTER TABLE table_name MODIFY column_name data_type NOT NULL;
-- एक साथ डिफ़ॉल्ट मान जोड़ना
ALTER TABLE table_name MODIFY column_name data_type NOT NULL DEFAULT 'default_value';
-- एक साथ कॉलम नाम बदलना
ALTER TABLE table_name CHANGE old_name new_name data_type NOT NULL;
एकाधिक कॉलम्स
ALTER TABLE DemoTable1949
MODIFY UserId INT NOT NULL,
MODIFY UserName VARCHAR(20) NOT NULL;
संबंधित ऑपरेशन
NOT NULL हटाना
ALTER TABLE DemoTable1949 MODIFY UserName VARCHAR(20) NULL;
CHECK प्रतिबंध जोड़ना (MySQL 8.0.16+)
ALTER TABLE DemoTable1949
ADD CONSTRAINT chk_username_length CHECK (CHAR_LENGTH(UserName) >= 3);
सर्वोत्तम अभ्यास
- उत्पादन पर लागू करने से पहले स्टेजिंग पर परीक्षण करें
- पहले मौजूदा NULL मानों की जांच करें:
SELECT COUNT(*) FROM table WHERE col IS NULL - डिफ़ॉल्ट मान प्रदान करें यदि उपयुक्त हो
- एप्लिकेशन कोड को अपडेट करें ताकि NULL पास न करे
- विदेशी कुंजी संबंधों पर विचार करें