स्वत: वेतन वृद्धि संख्या बदलें?


264

MySQL में, मेरे पास एक टेबल है, और मैं इसके बजाय auto_incrementमान सेट करना चाहता हूं । क्या यह संभव है और कौन सा क्वेरी स्टेटमेंट ऐसा करता है?51


आप बदल नहीं सकते, केवल वृद्धि
Vasilii Suricov

1
@VasiliiSuricov You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column. स्रोत यदि आप अपना auto_incrementएड कॉलम सेट करना चाहते हैं तो इससे अधिक मूल्य नहीं है , तो आप मूल्य को भी कम कर सकते हैं। ( mysql प्रलेखन )
seyfahni

जवाबों:


520

आप ALTER TABLEauto_increment के प्रारंभिक मूल्य को बदलने के लिए उपयोग कर सकते हैं :

ALTER TABLE tbl AUTO_INCREMENT = 5;

देखें MySQL संदर्भ अधिक जानकारी के लिए।


6
किसी को पता है कि अगर यह एक के बिना करना संभव है?
thesmart

3
हाँ, यह मुमकिन है। मेरा जवाब देखिए।
कॉसिमो सेप

3
MySQL 5.6 में एक बग था जो आपको AUTO_INCREMENTमूल्य को कम करने की अनुमति नहीं देगा , लेकिन यह 5.6.16 और 5.7.4 में तय किया गया है, देखें bugs.mysql.com/bug.php?id=69882
डैनियल

3
यदि आप ऐसा करते हैं, तो तालिका के बारे में cosimo की चेतावनी पर एक नज़र डालें!
h00ligan

15
स्पष्ट करने के लिए: प्रारंभिक मान को 5 पर सेट करने का मतलब है कि अगला इंसर्ट 5 होगा
स्टीन शूट

97

हां, आप ALTER TABLE t AUTO_INCREMENT = 42स्टेटमेंट का उपयोग कर सकते हैं । हालाँकि, आपको यह ध्यान रखने की आवश्यकता है कि यह आपकी पूरी तालिका के पुनर्निर्माण का कारण बनेगा, कम से कम InnoDB और कुछ MySQL संस्करणों के साथ। यदि आपके पास लाखों पंक्तियों के साथ पहले से मौजूद डेटासेट है, तो इसे पूरा होने में बहुत लंबा समय लग सकता है

मेरे अनुभव में, निम्नलिखित करना बेहतर है:

BEGIN WORK;
-- You may also need to add other mandatory columns and values
INSERT INTO t (id) VALUES (42);
ROLLBACK;

इस तरह, भले ही आप लेन-देन वापस कर रहे हों , MySQL ऑटो-इन्क्रीमेंट वैल्यू रखेगा, और बदलाव तुरंत लागू होगा।

आप एक SHOW CREATE TABLE tबयान जारी करके इसे सत्यापित कर सकते हैं । तुम्हे देखना चाहिए:

> SHOW CREATE TABLE t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
...
) ENGINE=InnoDB AUTO_INCREMENT=43 ...

5
धन्यवाद! SET foreign_key_checks = 0;इसके लिए भी उपयोगी है।
dnozay

कमाल का विचार! नाइटपिक: डालने के बाद SHOW CREATE TABLE tवास्तव में 43, यानी अगला मूल्य वापस आ जाएगा 42
पेट्रोटेक

2
@cosimo, प्रतीक्षा, इस नहीं है undocumented ? क्या मैनुअल ने कहा था कि उसे इस तरह से काम करना चाहिए? यदि नहीं तो यह अलग (भविष्य) mysql सेटअप में टूट सकता है।
पचेरियर

1
@ स्पेसियर हाँ, आप सही हैं। यह MySQL के वर्तमान में काम करने के तरीके पर निर्भर है। यह भविष्य में ऐसा काम नहीं कर सकता है। हालांकि MySQL इतिहास को देखते हुए, मुझे लगता है कि यह लंबे समय तक उस तरह से काम करना जारी रखेगा।
कॉसिमो

@cosimo, उम्मीद है कि वे इसे दस्तावेज करेंगे ताकि विश्वसनीय कोड वास्तव में इस अच्छे हैक का उपयोग कर सके। अब तक, कोड जो विश्वसनीय होना चाहता है वह इसका उपयोग नहीं कर सकता है।
पचेरियर

13

MySQL में 10 से शुरू होने पर, एक से ऑटो इन्क्रीमेंट कैसे करें:

create table foobar(
  id             INT PRIMARY KEY AUTO_INCREMENT,
  moobar         VARCHAR(500)
); 
ALTER TABLE foobar AUTO_INCREMENT=10;

INSERT INTO foobar(moobar) values ("abc");
INSERT INTO foobar(moobar) values ("def");
INSERT INTO foobar(moobar) values ("xyz");

select * from foobar;

'10', 'abc'
'11', 'def'
'12', 'xyz'

यह ऑटो आईडी कॉलम को 10 से शुरू करके बढ़ाता है।

5 से MySQL में ऑटो वृद्धि, 10 से शुरू:

drop table foobar
create table foobar(
  id             INT PRIMARY KEY AUTO_INCREMENT,
  moobar         VARCHAR(500)
); 
SET @@auto_increment_increment=5;
ALTER TABLE foobar AUTO_INCREMENT=10;

INSERT INTO foobar(moobar) values ("abc");
INSERT INTO foobar(moobar) values ("def");
INSERT INTO foobar(moobar) values ("xyz");

select * from foobar;
'11', 'abc'
'16', 'def'
'21', 'xyz'

यह ऑटो हर बार 5 कॉलम को बढ़ाता है, जो 10 से शुरू होता है।


5

स्वतः सुधारने की प्रक्रिया तालिका का AUTO_INCREMENT मान

DROP PROCEDURE IF EXISTS update_auto_increment;
DELIMITER //
CREATE PROCEDURE update_auto_increment (_table VARCHAR(64))
BEGIN
    DECLARE _max_stmt VARCHAR(1024);
    DECLARE _stmt VARCHAR(1024);    
    SET @inc := 0;

    SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(`id`), 0) + 1 INTO @inc FROM ', _table);
    PREPARE _max_stmt FROM @MAX_SQL;
    EXECUTE _max_stmt;
    DEALLOCATE PREPARE _max_stmt;

    SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT =  ', @inc);
    PREPARE _stmt FROM @SQL;
    EXECUTE _stmt;
    DEALLOCATE PREPARE _stmt;
END//
DELIMITER ;

CALL update_auto_increment('your_table_name')

3

यदि आपको इसके बजाय चर क्षेत्र के नामों के लिए इस प्रक्रिया की आवश्यकता है तो यह idसहायक हो सकता है:

DROP PROCEDURE IF EXISTS update_auto_increment;
DELIMITER //
CREATE PROCEDURE update_auto_increment (_table VARCHAR(128), _fieldname VARCHAR(128))
BEGIN
    DECLARE _max_stmt VARCHAR(1024);
    DECLARE _stmt VARCHAR(1024);    
    SET @inc := 0;

    SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(',_fieldname,'), 0) + 1 INTO @inc FROM ', _table);
    PREPARE _max_stmt FROM @MAX_SQL;
    EXECUTE _max_stmt;
    DEALLOCATE PREPARE _max_stmt;

    SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT =  ', @inc);
    PREPARE _stmt FROM @SQL;
    EXECUTE _stmt;
    DEALLOCATE PREPARE _stmt;
END //
DELIMITER ;

CALL update_auto_increment('your_table_name', 'autoincrement_fieldname');

2

आप इसे phpmyadmin का उपयोग करके भी कर सकते हैं। कार्यों पर जाने की तुलना में बस तालिका का चयन करें। और तालिका विकल्पों के नीचे ऑटो वेतन वृद्धि को बदलें। शुरू पर क्लिक करने के लिए मत भूलना फपीडामिन में ऑटो वृद्धि


-2

बस डेटा के साथ तालिका निर्यात करें .. तो इसके वर्ग की तरह कॉपी करें

CREATE TABLE IF NOT EXISTS `employees` (
  `emp_badgenumber` int(20) NOT NULL AUTO_INCREMENT,
  `emp_fullname` varchar(100) NOT NULL,
  `emp_father_name` varchar(30) NOT NULL,
  `emp_mobile` varchar(20) DEFAULT NULL,
  `emp_cnic` varchar(20) DEFAULT NULL,
  `emp_gender` varchar(10) NOT NULL,
  `emp_is_deleted` tinyint(4) DEFAULT '0',
  `emp_registration_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `emp_overtime_allowed` tinyint(4) DEFAULT '1',
  PRIMARY KEY (`emp_badgenumber`),
  UNIQUE KEY `bagdenumber` (`emp_badgenumber`),
  KEY `emp_badgenumber` (`emp_badgenumber`),
  KEY `emp_badgenumber_2` (`emp_badgenumber`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=111121326 ;

अब ऑटो वेतन वृद्धि मूल्य बदलें और sql निष्पादित करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.