2011-08-05 12 views
53

में ऑटोइनक्रिकमेंट जोड़ना मैंने कॉलम itemID पर MySQL में एक तालिका बनाई। तालिका बनाने के बाद, अब मैं इस कॉलम को AUTOINCREMENT पर बदलना चाहता हूं। यह ALTER कथन का उपयोग करके कैसे किया जा सकता है?ALTER तालिका - MySQL

तालिका परिभाषा:

ALLITEMS (itemid int(10) unsigned, itemname varchar(50))

मैं निम्नलिखित कोड का उपयोग कर रहा है, लेकिन यह त्रुटि फेंक है: वाक्य रचना गलत

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT; 
+0

डुप्लिकेट की: http://stackoverflow.com/questions/4795382/mysql-add-auto-increment-to-primary-key – lepe

+3

'AUTOINCREMENT' एक अंडरस्कोर है:' AUTO_INCREMENT' .... – Pacerier

उत्तर

81
CREATE TABLE ALLITEMS(
    itemid INT(10)UNSIGNED, 
    itemname VARCHAR(50) 
); 

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

DESC ALLITEMS; 

INSERT INTO ALLITEMS(itemname) 
VALUES 
    ('Apple'), 
    ('Orange'), 
    ('Banana'); 

SELECT 
    * 
FROM 
    ALLITEMS; 

मैंने पहले भी CHANGE और MODIFY कीवर्ड के साथ भ्रमित किया गया था:

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

ALTER TABLE ALLITEMS MODIFY itemid INT(5); 

जब तक हम देखते हैं, यह भी ध्यान दें कि AUTO_INCREMENT भी एक पूर्वनिर्धारित संख्या के साथ शुरू कर सकते हैं:

ALTER TABLE tbl AUTO_INCREMENT = 100; 
+1

मैंने एसक्यूएल सर्वर 2012 में पहले से ही पहचान परिभाषित की है लेकिन मैं कुछ मूल्य डीबी को पास करने की कोशिश कर रहा हूं। तो उस जगह (ऑटो-वर्धित) मुझे वीएस 2010 में पास करने की क्या ज़रूरत है ?? –

+2

वैकल्पिक तालिका ऑलटैस बदलें आइटम आइटम आइटम INT (10) स्वत: सुधार। आपको "प्राथमिक कुंजी" निर्दिष्ट करने की आवश्यकता नहीं है। इसके परिणामस्वरूप त्रुटि हो सकती है: "एकाधिक प्राथमिक कुंजी परिभाषित"। इसके अलावा, महान जवाब! – lepe

+0

@ थिंककोड 'चेंज' और 'संशोधित कॉलम' का उपयोग कब करें? –

15

वाक्य रचना:

ALTER TABLE `table1` CHANGE `itemId` `itemId` INT(11) NOT NULL AUTO_INCREMENT 

लेकिन तालिका एक परिभाषित कुंजी (Itemid पर पूर्व प्राथमिक कुंजी) की जरूरत है।

+1

क्या 'पूर्व प्राथमिक कुंजी 'और' प्राथमिक कुंजी 'के बीच अंतरदिही पर अंतर? – Thufir

10
ALTER TABLE `ALLITEMS` 
    CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; 
+2

यह स्वीकार्य उत्तर होना चाहिए।बहुत ही कम किसी को नकारात्मक (हस्ताक्षरित) आईडी कॉलम का उपयोग करने की आवश्यकता होगी। –

2
ALTER TABLE allitems 
CHANGE itemid itemid INT(10) AUTO_INCREMENT; 
1
ALTER TABLE tblcatalog 
    CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST; 
-1
ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY; 
+0

हालांकि यह कोड स्निपेट प्रश्न हल कर सकता है, [एक स्पष्टीकरण सहित] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। कृपया व्याख्यात्मक टिप्पणियों के साथ अपने कोड को भीड़ न करने का प्रयास करें, क्योंकि इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है! – FrankerZ

1
ओ पी के मौजूदा तालिका के लिए एक AUTO_INCREMENT प्राथमिक कुंजी जोड़ने के लिए

बेसिक वाक्य रचना: the docs से

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY; 

या एक नई तालिका के लिए, यहाँ वाक्य रचना उदाहरण है:

CREATE TABLE animals (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
); 

जाल और चीजें ध्यान दें:

  • एक AUTO_INCREMENT कॉलम पर एक सूचकांक होना चाहिए। (आमतौर पर, आप इसे प्राथमिक कुंजी होना चाहते हैं, लेकिन MySQL को इसकी आवश्यकता नहीं है।)
  • आमतौर पर AUTO_INCREMENT कॉलम UNSIGNED बनाने का अच्छा विचार है। डॉक्स से:

    Use the UNSIGNED attribute if possible to allow a greater range.

  • एक CHANGE या MODIFY खंड का उपयोग करते समय (जब भी आप एक CHANGE या MODIFY खंड का उपयोग करें या वास्तव में ) NOT NULL की तरह एक स्तंभ AUTO_INCREMENT बनाने के लिए आप स्तंभ के लिए सभी संशोधक शामिल करने के लिए सावधान रहना चाहिए, या UNSIGNED, जो तालिका परिभाषा में दिखाई देता है जब आप SHOW CREATE TABLE yourtable पर कॉल करते हैं। ये संशोधक अन्यथा खो जाएंगे।
संबंधित मुद्दे