2011-10-30 11 views
6

सेट करने के लिए भूल गए, मैंने एक आईडी सेट करने के लिए एक ऑटो incrementing कॉलम के साथ एक डेटाबेस स्थापित किया। समस्या यह है कि मैं phpMyAdmin में तालिका बनाते समय ऑटो वृद्धि को जांचना भूल गया ... और अब तक ध्यान नहीं दिया!MySQL: ऑटो वृद्धि

ID | column one | column two 
------------------------------------ 
0 | some value | some value 
0 | other value | something else 
0 | example val. | something 
0 | my example | something 

असल में, मेरी "ऑटो incrementing" कॉलम बोर्ड भर में शून्य से पता चलता: तो क्या मैं कुछ की तरह है। मैं पिछले और सभी भावी पंक्तियों के लिए ऑटो वृद्धि दिखाने के लिए इस तालिका को कैसे संशोधित कर सकता हूं?

+1

आपके पास तालिका का एक स्कीमा है? –

उत्तर

8

तो तालिका खाली थे तुम सिर्फ कर सकता है:

ALTER TABLE mytable MODIFY COLUMN id bigint not null primary key auto_increment 

लेकिन मुझे यकीन है कि क्या उस में पंक्तियों के साथ क्या होगा नहीं हूँ। सही परिभाषाओं के साथ एक नया निर्माण करना सबसे अच्छा हो सकता है, आईडी कॉलम से कम डेटा कॉपी करें, पुरानी (गलत) तालिका ड्रॉप करें, और नए को पुराने नाम पर ले जाएं।

-- Either: 
CREATE TABLE newtable LIKE mytable; 
ALTER TABLE newtable MODIFY COLUMN id bigint not null primary key auto_increment; 
-- or: 
CREATE TABLE newtable (
    id bigint not null primary key auto_increment, 
    column1 type1, 
    column2 type2, 
    ... 
); 

INSERT INTO newtable 
    (column1, column2, ...) 
    SELECT column1, column2, column3, ... 
    FROM mytable; 
-- Make SURE that insert worked BEFORE you drop the old table 
-- and lose data if it didn't. 
DROP TABLE mytable; 
ALTER TABLE newtable RENAME TO mytable; 

मुझे यकीन है कि phpMyAdmin में इसे और अधिक ग्राफिक रूप से करने की क्षमता है।

+0

हां, यह काम करेगा। बस 'प्राथमिक कुंजी' और 'auto_increment' होने के लिए कॉलम को संशोधित करें। –

+1

+1 अच्छा समाधान यदि आपके पास बहुत सारे रिकॉर्ड हैं –

6

सबसे पहले अपने रिकॉर्ड (अन्यथा आप प्राथमिक कुंजी नकल मिल जाएगा) अद्यतन:

UPDATE `tablename` SET id = 1 WHERE "column one" = 'some value'; 
UPDATE `tablename` SET id = 2 WHERE "column one" = 'other value'; 
UPDATE `tablename` SET id = 3 WHERE "column one" = 'example val.'; 
UPDATE `tablename` SET id = 4 WHERE "column one" = 'my example'; 

तो प्राथमिक कुंजी/auto_increment जोड़ें:

ALTER TABLE tablename AUTO_INCREMENT = 5; 
:

ALTER TABLE tablename MODIFY COLUMN id int(11) NOT NULL primary key auto_increment; 

फिर अगली auto_increment सेट

+0

सभी रिकॉर्ड अपडेट करना बहुत धीमी और श्रम-गहन होने जा रहा है यदि कुछ पंक्तियों से अधिक है। – Kevin

+0

मैं सहमत हूं, लेकिन उदाहरण में 4 रिकॉर्ड हैं। यदि उपयोगकर्ता के पास बहुत सारे रिकॉर्ड हैं तो मैंने आपका वोट दिया –

4

आप आईडी कॉलम छोड़ सकते हैं और इसे फिर से बना सकते हैं। यदि आपको ऑटो वृद्धि को सक्षम करने के लिए याद किया जाता है, तो आईडी को फिर से सौंप दिया जाएगा;)

संबंधित मुद्दे