MySQL में AUTO_INCREMENT कॉलम पर PRIMARY KEY कंस्ट्रेंट अनिवार्य है। यदि आप AUTO_INCREMENT कॉलम से PRIMARY KEY हटाने का प्रयास करते हैं, तो MySQL एरर देता है।
उदाहरण
Accounts टेबल में Sr कॉलम AUTO_INCREMENT और PRIMARY KEY दोनों है:
mysql> DESCRIBE accounts; +--------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+----------------+ | Sr | int(10) | NO | PRI | NULL | auto_increment | | Name | varchar(20) | YES | | NULL | | | amount | int(15) | YES | | NULL | | +--------+-------------+------+-----+---------+----------------+
PRIMARY KEY हटाने का प्रयास
mysql> ALTER TABLE Accounts DROP PRIMARY KEY; ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
एरर विश्लेषण
| एरर कोड | संदेश | अर्थ |
|---|---|---|
| 1075 | Incorrect table definition; there can be only one auto column and it must be defined as a key | AUTO_INCREMENT कॉलम KEY (PRIMARY/UNIQUE) होना चाहिए |
क्यों यह प्रतिबंध है?
- AUTO_INCREMENT के लिए अद्वितीय मान उत्पन्न करने के लिए इंडेक्स आवश्यक है
- PRIMARY KEY या UNIQUE इंडेक्स के बिना डुप्लिकेट चेक संभव नहीं
- InnoDB में AUTO_INCREMENT कॉलम इंडेक्स का पहला कॉलम होना चाहिए
समाधान: क्रम बदलें
यदि PRIMARY KEY बदलना है:
-- 1. पहले AUTO_INCREMENT हटाएं ALTER TABLE Accounts MODIFY Sr INT NOT NULL; -- 2. फिर PRIMARY KEY हटाएं ALTER TABLE Accounts DROP PRIMARY KEY; -- 3. नया PRIMARY KEY बनाएं ALTER TABLE Accounts ADD PRIMARY KEY (Name); -- उदाहरण -- 4. यदि नए कॉलम पर AUTO_INCREMENT चाहिए ALTER TABLE Accounts MODIFY NewCol INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
सारांश
AUTO_INCREMENT कॉलम से PRIMARY KEY सीधे नहीं हटा सकते। पहले AUTO_INCREMENT हटाएं, फिर PRIMARY KEY।