MySQL में NULL मान वाले कॉलम पर NOT NULL लागू करने का परिणाम
यदि किसी कॉलम में पहले से NULL मान मौजूद हैं, तो उस पर ALTER TABLE ... MODIFY ... NOT NULL लागू करने पर MySQL एरर देता है और ऑपरेशन फेल हो जाता है।
उदाहरण
test2 टेबल में ID कॉलम में दूसरी पंक्ति में NULL है:
mysql> SELECT * FROM test2;
+------+--------+
| ID | Name |
+------+--------+
| 1 | Gaurav |
| NULL | Rahul |
+------+--------+
NOT NULL लागू करने का प्रयास
mysql> ALTER TABLE test2 MODIFY ID INT NOT NULL;
ERROR 1265 (01000): Data truncated for column 'ID' at row 2
एरर विश्लेषण
एरर कोड
संदेश
अर्थ
1265
Data truncated for column 'X' at row N
पंक्ति N में मान NOT NULL कंस्ट्रेंट के अनुरूप नहीं
समाधान: पहले NULL मान ठीक करें
-- 1. NULL मानों को डिफ़ॉल्ट/वैध मान से अपडेट करें
UPDATE test2 SET ID = 0 WHERE ID IS NULL;
-- या
UPDATE test2 SET ID = 2 WHERE ID IS NULL;
-- 2. फिर NOT NULL लागू करें
ALTER TABLE test2 MODIFY ID INT NOT NULL;
Query OK, 0 rows affected (0.20 sec)
सर्वोत्तम अभ्यास
पहले जांचें: SELECT COUNT(*) FROM table WHERE col IS NULL
NULL मानों को उपयुक्त डिफ़ॉल्ट से भरें
<ली>फिर NOT NULL कंस्ट्रेंट लागू करें
बड़े टेबल पर ऑपरेशन से पहले बैकअप लें
नोट: MySQL 8.0.13+ में ALTER TABLE ... ALTER COLUMN ... SET NOT NULL सिंटैक्स भी समर्थित है।
MySQL में TIMESTAMP DEFAULT CURRENT_TIMESTAMP कॉलम में मान निर्दिष्ट किए बिना INSERT करने पर वर्तमान दिनांक-समय स्वचालित रूप से डाला जाता है।
तालिका बनाएं
mysql> CREATE TABLE DemoTable (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserLoginDate TIMESTAMP DEFAULT CURRENT_T
पहले से बनी टेबल में एक नया NOT NULL कॉलम जोड़ने के लिए ALTER कमांड का उपयोग करें। आइए पहले एक टेबल बनाते हैं:
mysql> create table DemoTable
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20)
-> ); Query OK, 0 rows affected (0.60 sec)
मौजूदा टेबल मे
इसके लिए आप IS NOT NULL प्रॉपर्टी का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं:
mysql> create table DemoTable1
(
DueDate date
); Query OK, 0 rows affected (0.00 sec)
इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें:
mysql> insert into DemoTable1 values(2019-09-10); Query OK, 1 r