उदाहरण के लिए, यहां एक तालिका है जिसमें प्राथमिक कुंजी है लेकिन AUTO_INCREMENT
नहीं है :
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
आप MODIFY
कर सकते हैं AUTO_INCREMENT
. के साथ इसे फिर से परिभाषित करने के लिए कॉलम विकल्प:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
सत्यापित करें कि यह प्रभावी हो गया है:
mysql> SHOW CREATE TABLE foo;
आउटपुट:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
ध्यान दें कि आपने दूसरे कॉलम को बनाने और मूल कॉलम को छोड़ने की आवश्यकता के बिना कॉलम परिभाषा को जगह में संशोधित किया है। PRIMARY KEY
बाधा अप्रभावित है, और आपको ALTER TABLE
में उल्लेख करने की आवश्यकता नहीं है बयान।
इसके बाद आप परीक्षण कर सकते हैं कि एक इंसर्ट एक नया मान उत्पन्न करता है:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
आउटपुट:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
मैंने मैक ओएस एक्स पर MySQL 5.0.51 पर इसका परीक्षण किया।
मैंने ENGINE=InnoDB
. के साथ भी परीक्षण किया और एक आश्रित तालिका। id
को संशोधित करना स्तंभ परिभाषा संदर्भात्मक अखंडता को बाधित नहीं करती है।
त्रुटि 150 का जवाब देने के लिए आपने अपनी टिप्पणी में उल्लेख किया है, यह शायद विदेशी कुंजी बाधाओं के साथ एक संघर्ष है। क्षमा करें, मैंने इसका परीक्षण करने के बाद सोचा कि यह काम करेगा। यहां कुछ लिंक दिए गए हैं जो समस्या का निदान करने में मदद कर सकते हैं:
- mysql त्रुटि 1025 (HY000) का क्या अर्थ है:'./foo' (errorno:150) के नाम बदलने में त्रुटि का क्या अर्थ है?
- http://www.simplicidade.org/notes/ अभिलेखागार/2008/03/mysql_errno_150.html