यह वही है जो मैंने कोशिश की, लेकिन यह विफल है:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
क्या किसी के पास कोई टिप है?
यह वही है जो मैंने कोशिश की, लेकिन यह विफल है:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
क्या किसी के पास कोई टिप है?
जवाबों:
स्तंभ जोड़ने के बाद, आप हमेशा प्राथमिक कुंजी जोड़ सकते हैं:
ALTER TABLE goods ADD PRIMARY KEY(id)
जैसा कि आपकी स्क्रिप्ट काम नहीं कर रही थी, आपको PRIMARY KEYकेवल शब्द ही नहीं, निर्दिष्ट करने की आवश्यकता है PRIMARY:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRSTके बाद AUTO_INCREMENT, जो इसका मतलब है, कि idपहले से ही विद्यमान तालिका के पहले कॉलम किया जाएगा। अन्यथा इसे तालिका के अंत में रखा जाएगा जैसा कि अभी लिखा गया है, जो कि सरल करते समय थोड़ा भ्रमित हो सकता हैSELECT * ...
यदि आप किसी मौजूदा स्तंभ में प्राथमिक कुंजी बाधा जोड़ना चाहते हैं, तो पहले से सूचीबद्ध सभी वाक्यविन्यास विफल हो जाएंगे।
मौजूदा स्तंभ में प्राथमिक कुंजी बाधा जोड़ने के लिए फ़ॉर्म का उपयोग करें:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
यदि आपकी तालिका काफी बड़ी है तो कथन का उपयोग न करें:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
क्योंकि यह एक अस्थायी तालिका में सभी डेटा की एक प्रति बनाता है, तालिका में परिवर्तन करता है और फिर इसे वापस कॉपी करता है। बेहतर यह मैन्युअल रूप से करते हैं। अपनी तालिका का नाम बदलें:
rename table goods to goods_old;
प्राथमिक कुंजी और सभी आवश्यक अनुक्रमित के साथ नई तालिका बनाएं:
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
पुराने तालिका से सभी डेटा को स्थानांतरित करें, कॉपी करने में तेजी लाने के लिए कुंजी और अनुक्रमित को अक्षम करें:
- MyISAM टैब के लिए इस का उपयोग करें :
SET UNIQUE_CHECKS=0;
ALTER TABLE goods DISABLE KEYS;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;
- InnoDB टैब के लिए इस का उपयोग करें :
SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1;
~ 200 mln पंक्तियों वाली तालिका में PK को जोड़ने के लिए 2 000 सेकंड लगते हैं।
यकीन नहीं होता कि यह किसी और के लिए है, लेकिन मैं डेटाबेस में पहले कॉलम के लिए आईडी तालिका पसंद करता हूं। इसके लिए वाक्य रचना है:
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
जो कि पहले उत्तर पर बस थोड़ा सा सुधार है। यदि आप चाहते थे कि यह एक अलग स्थिति में हो, तो
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
HTH, -ft
यह कोड मेरे mysql db में काम करता है:
ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;
इसे इस्तेमाल करे,
alter table goods add column `id` int(10) unsigned primary key auto_increment
मेरे लिए, किसी भी सुझाव ने मुझे वाक्य रचना की त्रुटियों को देने का काम नहीं किया, इसलिए मैंने बस phpmyadmin (संस्करण 4.9.2), (10.4.10-MariaDB) का उपयोग करके एक प्रयास दिया और idऑटो-इंक्रीमेंट प्राथमिक कुंजी के साथ कॉलम जोड़ा । Idस्तंभ को पहले तत्व से अच्छी तरह से जोड़ा गया था।
क्वेरी आउटपुट था:
ALTER तालिका table_nameजोड़ें idINT नहीं NULL AUTO_INCREMENT सबसे पहले, प्राथमिक कुंजी (ADD id);
ठीक से काम करने के लिए उद्धरण निकालें ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;