मैं किसी फ़ील्ड को कैसे रीसेट कर सकता हूं AUTO_INCREMENT
?
मैं चाहता हूं कि इसकी गिनती 1
फिर से शुरू हो।
TRUNCATE TABLE yourTableName;
मैं किसी फ़ील्ड को कैसे रीसेट कर सकता हूं AUTO_INCREMENT
?
मैं चाहता हूं कि इसकी गिनती 1
फिर से शुरू हो।
TRUNCATE TABLE yourTableName;
जवाबों:
आप इसके साथ काउंटर रीसेट कर सकते हैं:
ALTER TABLE tablename AUTO_INCREMENT = 1
InnoDB के लिए आप auto_increment
मूल्य को सबसे कम या उच्चतम वर्तमान सूचकांक के बराबर सेट नहीं कर सकते । ( ViralPatel से उद्धरण ):
ध्यान दें कि आप पहले से उपयोग किए गए किसी भी या उससे कम मूल्य के काउंटर को रीसेट नहीं कर सकते। MyISAM के लिए, यदि मान AUTO_INCREMENT कॉलम में वर्तमान में अधिकतम मूल्य से कम या बराबर है, तो मान वर्तमान अधिकतम प्लस एक पर रीसेट हो जाता है। InnoDB के लिए, यदि मान स्तंभ में वर्तमान अधिकतम मान से कम है, तो कोई त्रुटि नहीं होती है और वर्तमान अनुक्रम मान परिवर्तित नहीं होता है।
देखें कि किसी अन्य तालिका से MAX मान का उपयोग करके एक MySQL AutoIncrement कैसे रीसेट करें? गतिशील रूप से स्वीकार्य मूल्य कैसे प्राप्त करें।
circular reference
curcular reference
?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
मुझे लगता है कि यह ऐसा करेगा
UPDATE
सभी मानों को अपडेट करेगा id
।
बस इस तरह:
ALTER TABLE tablename AUTO_INCREMENT = value;
संदर्भ: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
इसका मतलब डिफ़ॉल्ट मान पर सेट करना है ... इसलिए आप "वैल्यू" को 1 से बदल सकते हैं
"ऑपरेशन" टैब के तहत phpmyadmin के साथ एक बहुत ही आसान तरीका है, आप तालिका विकल्प में सेट कर सकते हैं, जिस नंबर को आप चाहते हैं।
सबसे अच्छा समाधान जो मेरे लिए काम किया:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
इसका तेज़, innoDB के साथ काम करता है, और मुझे वर्तमान अधिकतम मूल्य जानने की आवश्यकता नहीं है! इस तरह ऑटो इंक्रीमेंट काउंटर रीसेट हो जाएगा और अधिकतम मूल्य मौजूद होने से यह अपने आप शुरू हो जाएगा।
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, जबकि ALTER TABLE tablename AUTO_INCREMENT = 1
ऐसा नहीं है ।
इस प्रश्न के उच्चतम मूल्यांकित उत्तर सभी "अपने अनुकूली AUTO_INCREMENT = मान" की सिफारिश करते हैं। हालाँकि, यह केवल तभी काम करता है जब value
परिवर्तन ऑटोइन्क्रिमेंट कॉलम के वर्तमान अधिकतम मूल्य से अधिक हो। MySQL 8 प्रलेखन के अनुसार :
आप वर्तमान में उपयोग किए जाने वाले मान से कम या अधिक के लिए काउंटर को रीसेट नहीं कर सकते। दोनों InnoDB और MyISAM के लिए, यदि मान AUTO_INCREMENT कॉलम में वर्तमान में अधिकतम मान से कम या बराबर है, तो मान वर्तमान अधिकतम AUTO_INCREMENT स्तंभ मान प्लस एक पर रीसेट हो जाता है।
संक्षेप में, आप केवल स्वत: कॉलम के मूल्य को बढ़ाने के लिए AUTO_INCREMENT को बदल सकते हैं, इसे 1 पर रीसेट नहीं कर सकते, जैसा कि ओपी प्रश्न के दूसरे भाग में पूछता है। उन विकल्पों के लिए जो वास्तव में आपको AUTO_INCREMENT को इसके वर्तमान अधिकतम से नीचे सेट करने की अनुमति देते हैं, Reorder / रीसेट ऑटो इंक्रीमेंट प्राइमरी की पर एक नज़र डालें ।
अपडेट जोड़ना क्योंकि MySQL 5.6 में कार्यक्षमता बदल गई है। MySQL 5.6 के रूप में आप इनोबीडी के साथ साधारण अलर्ट का उपयोग कर सकते हैं:
ALTER TABLE tablename AUTO_INCREMENT = 1;
इसे दर्शाने के लिए डॉक्स अपडेट किए गए हैं:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
मेरे परीक्षण से यह भी पता चलता है कि तालिका की प्रतिलिपि नहीं बनाई गई है, मान बस बदला गया है।
इसमें अच्छे विकल्प दिए गए हैं How To Reset MySQL Autoincrement Column
ध्यान दें कि InnoDB के लिए काम नहींALTER TABLE tablename AUTO_INCREMENT = value;
करता है
DELETE
(या ROLLBACK
) आईडी पुनर्प्राप्त नहीं करेगा। एक अपवाद: पुनरारंभ (या क्रैश) के बाद, अगली आईडी की गणना की जाती है MAX(id)+1
, जिससे अंत में हटाए गए आईडी को प्रभावी ढंग से पुनर्प्राप्त किया जा सकता है । अपवाद के अपवाद: MySQL 8.0 उन आईडी को अप्रयुक्त छोड़ देता है।
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
मैंने अपनी कुछ लिपियों में इसका उपयोग किया, आईडी फ़ील्ड को छोड़ दिया गया और फिर पिछली सेटिंग्स के साथ वापस जोड़ा गया, डेटाबेस टेबल के भीतर मौजूद सभी फ़ील्ड नए ऑटो वेतन वृद्धि मूल्यों से भरे हुए हैं, यह भी InnoDB के साथ काम करना चाहिए।
ध्यान दें कि तालिका के भीतर सभी फ़ील्ड्स को फिर से जोड़ा जाएगा और अन्य आईडी होंगे !!!।
आप TRUNCATE
इस तरह से सिंटैक्स तालिका का उपयोग कर सकते हैं :
TRUNCATE TABLE table_name
सावधान !! अपने में सब कुछ मिटाTRUNCATE TABLE your_table
देंगे !!your_table
TRUNCATE
देगा !
TRUNCATE
auto_increment
खेतों को भी रीसेट करेगा ? मेरा उपयोग मामला साफ करने के लिए है पुराने डेटा को तालिका में और नए डेटा के लिए आईडी को फिर से शुरू करने के लिए है (कल्पना करें, परीक्षण पूरा होने के बाद उचित उपयोग के लिए तालिका साफ़ करना)। मैंने सोचा कि मुझे DROP
पूरी मेज पर जाना होगा और CREATE
इसे फिर से।
auto_increment
, तो DELETE FROM
इसके बजाय का उपयोग करें TRUNCATE
।
यह खाली टेबल के लिए है:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
यदि आपके पास डेटा है, लेकिन आप इसे साफ करना चाहते हैं, तो मैं इसका उपयोग करने की सलाह देता हूं:
ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
यहां मेरा समाधान है, लेकिन मैं यह करने की सलाह नहीं दूंगा यदि आपके कॉलम में बाधाएं हैं या अन्य तालिकाओं के लिए विदेशी कुंजी के रूप में जुड़ा हुआ है क्योंकि यह बुरा प्रभाव होगा या काम भी नहीं करेगा।
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
यह अच्छी तरह से काम करता है!
MySQL 5.6 के अनुसार नीचे का दृष्टिकोण ऑनलाइन DDL (नोट algorithm=inplace
) के कारण तेजी से काम करता है :
alter table tablename auto_increment=1, algorithm=inplace;
आप बस अनुक्रम को रीसेट करने के लिए तालिका को काट सकते हैं
TRUNCATE TABLE TABLE_NAME
मैंने तालिका को बदलने की कोशिश की और Auto_increment को 1 पर सेट किया, लेकिन यह काम नहीं किया। मैंने जो कॉलम नाम में वृद्धि कर रहा था, उसे हटाने का संकल्प लिया, फिर अपने पसंदीदा नाम के साथ एक नया कॉलम बनाएँ और उस नए कॉलम को शुरुआत से बढ़ाएँ।
एक तालिका के लिए ऑटो वेतन वृद्धि काउंटर दो तरीकों से सेट (पुनः) हो सकता है:
किसी क्वेरी को निष्पादित करके, जैसे अन्य लोगों ने पहले ही समझाया:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
कार्यक्षेत्र या अन्य दृश्य डेटाबेस डिज़ाइन टूल का उपयोग करना। मैं कार्यक्षेत्र में यह दिखाने जा रहा हूं कि यह कैसे किया जाता है - लेकिन यह अन्य टूल में भी बहुत अलग नहीं होना चाहिए। इच्छित तालिका पर राइट क्लिक करें और Alter table
संदर्भ मेनू से चयन करें । तल पर आप तालिका बदलने के लिए सभी उपलब्ध विकल्प देख सकते हैं। चुनें Options
और आपको यह फॉर्म मिलेगा:
फिर क्षेत्र में वांछित मान सेट करें Auto increment
जैसा कि छवि में दिखाया गया है। यह मूल रूप से पहले विकल्प में दिखाए गए क्वेरी को निष्पादित करेगा।
नवीनतम प्लस एक आईडी अपडेट करने के लिए
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
वैकल्पिक तालिका टैबलेन AUTO_INCREMENT = 1
मैंने गुगली की और यह सवाल पाया, लेकिन जवाब मैं वास्तव में दो मानदंडों को पूरा करने के लिए देख रहा हूं:
चूँकि मुझे वह नहीं मिल रहा है जो मैं यहाँ चाहता हूँ, मैंने विभिन्न उत्तरों से उत्तर को हटा दिया है और यहाँ साझा कर रहा हूँ।
ध्यान देने योग्य कुछ बातें:
id
रूप int
में फ़ील्ड के साथ फ़ील्ड का उपयोग करती हैइस तरह एक संग्रहीत प्रक्रिया बनाएँ:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
फिर इसे चलाएं।
चलाने से पहले, यह ऐसा दिखता है जब आप अपने डेटाबेस में संग्रहीत प्रक्रियाओं के तहत देखते हैं।
जब मैं दौड़ता हूं, तो मैं केवल संग्रहीत प्रक्रिया का चयन करता हूं और रन चयन को दबाता हूं
नोट: सीमांकक भाग महत्वपूर्ण हैं। इसलिए यदि आप इस प्रश्न में शीर्ष चयनित उत्तरों से कॉपी और पेस्ट करते हैं, तो वे इस कारण से काम नहीं करते हैं।
मुझे चलाने के बाद, मुझे संग्रहीत प्रक्रिया को देखना चाहिए
यदि आपको संग्रहीत प्रक्रिया को बदलने की आवश्यकता है, तो आपको संग्रहीत प्रक्रिया को हटाने की आवश्यकता है, फिर से फिर से चलाने का चयन करें।
इस बार आप केवल सामान्य MySQL प्रश्नों का उपयोग कर सकते हैं।
call reset_autoincrement('products');
मूल रूप से https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc में मेरे अपने एसक्यूएल प्रश्नों के नोट्स और StackOverflow के लिए अनुकूलित
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
इस क्वेरी को चलाने का प्रयास करें
ALTER TABLE tablename AUTO_INCREMENT = value;
या रीसेट ऑटो वृद्धि के लिए इस क्वेरी का प्रयास करें
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
और Auto Increment को Set करें फिर इस Query को Run करें
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
मेरा सुझाव है कि आप क्वेरी ब्राउज़र पर जाएं और निम्नलिखित कार्य करें:
तालिका में नई पंक्ति दर्ज करते ही Auto_increment को एक पर रीसेट करना चाहिए।
मुझे नहीं पता कि यदि आप एक पंक्ति जोड़ने का प्रयास करते हैं तो क्या होगा जहां एक auto_increment फ़ील्ड मान पहले से मौजूद है।
उममीद है कि इससे मदद मिलेगी!
सबसे अच्छा तरीका एआई के साथ क्षेत्र को हटा दें और एआई के साथ फिर से जोड़ दें, सभी तालिकाओं के लिए काम करता है