একটি বিদ্যমান কলামকে NOT NULL কনস্ট্রেইন্ট দিতে ALTER TABLE ... MODIFY ব্যবহার করা হয়। এটি কলামের ডেটা টাইপ পুনঃনির্দিষ্ট করে কনস্ট্রেইন্ট যোগ করে।
টেবিল তৈরি (প্রাথমিকভাবে NULLable)
mysql> CREATE TABLE DemoTable1949 (
UserId INT,
UserName VARCHAR(20)
);
NOT NULL কনস্ট্রেইন্ট যোগ করা
mysql> ALTER TABLE DemoTable1949
MODIFY UserName VARCHAR(20) NOT NULL;
আউটপুট: Query OK, 0 rows affected (0.00 sec)
টেবিল কাঠামো যাচাই
mysql> DESC DemoTable1949;
+----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | UserId | int(11) | YES | | NULL | | | UserName | varchar(20) | NO | | NULL | | <-- Null = NO +----------+-------------+------+-----+---------+-------+
টেস্ট: NULL ইনসার্ট করার চেষ্টা
mysql> INSERT INTO DemoTable1949 VALUES (101, NULL);
ERROR 1048 (23000): Column 'UserName' cannot be null
বৈধ ইনসার্ট
mysql> INSERT INTO DemoTable1949 VALUES (101, 'Chris'), (102, 'Bob');
ফলাফল যাচাই
mysql> SELECT * FROM DemoTable1949;
+--------+----------+ | UserId | UserName | +--------+----------+ | 101 | Chris | | 102 | Bob | +--------+----------+
গুরুত্বপূর্ণ নোট
- বিদ্যমান NULL মান থাকলে:
MODIFY ... NOT NULLফেইল করবে। আগে NULL মানগুলো আপডেট করুন:UPDATE table SET col = 'default' WHERE col IS NULL; MODIFYকলামের পুরো ডেফিনিশন দিতে হয় (টাইপ, দৈর্ঘ্য, কনস্ট্রেইন্ট) — শুধুNOT NULLলিখলেই হয় না।CHANGEব্যবহার করলে কলামের নামও পরিবর্তন করা যায়:ALTER TABLE t CHANGE old_name new_name VARCHAR(20) NOT NULL;
CHANGE vs MODIFY
| বিষয় | MODIFY | CHANGE |
|---|---|---|
| কলাম নাম পরিবর্তন | না | হ্যাঁ |
| সিনট্যাক্স | MODIFY col_name definition | CHANGE old_name new_name definition |
| কোলেশন/চারসেট | রাখা যায় | রাখা যায় |