자동 증분 시작 번호를 변경 하시겠습니까?


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 ed 열 을 설정하려는 값보다 높은 값이 없으면 값 을 줄일 수도 있습니다. ( mysql documentation )
seyfahni

답변:


520

ALTER TABLEauto_increment 초기 값을 변경하는 데 사용할 수 있습니다 .

ALTER TABLE tbl AUTO_INCREMENT = 5;

자세한 내용은 MySQL 참조 를 참조하십시오.


6
ALTER없이 할 수 있는지 아는 사람이 있습니까?
thesmart

3
네 가능합니다. 내 답변을 참조하십시오.
Cosimo

3
MySQL 5.6에는 AUTO_INCREMENT값 을 줄일 수없는 버그가 있었지만 5.6.16 및 5.7.4에서 수정되었습니다. bugs.mysql.com/bug.php?id=69882
Daniel Vandersluis

3
이 작업을 수행하면 테이블을 다시 작성하는 것에 대한 cosimo의 경고를 살펴보십시오!
h00ligan

15
명확히하기 위해 : 초기 값을 5로 설정한다는 것은 다음 인서트가 5임을 의미합니다.
Steen Schütt

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

훌륭한 아이디어! Nitpick : SHOW CREATE TABLE t실제로 43, 즉 삽입 후 다음 값을 반환 42합니다.
petrkotek

2
@cosimo, 잠깐만, 이것은 문서화되어 있지 않습니까? 매뉴얼은 그렇게 작동해야한다고 말했습니까? 그렇지 않으면 다른 (미래의) mysql 설정에서 깨질 수 있습니다.
Pacerier

1
@Pacerier 네, 맞습니다. 이것은 현재 MySQL이 작동하는 방식에 의존합니다. 앞으로는 그렇게 작동하지 않을 수 있습니다. 그러나 MySQL의 역사를 감안할 때 오랫동안 계속 그렇게 작동한다고 가정합니다.
Cosimo

@cosimo, 신뢰할 수있는 코드가 실제로이 좋은 핵을 사용할 수 있도록 문서화하기를 바랍니다. 현재 신뢰할 수있는 코드는 이것을 사용할 수 없습니다.
Pacerier

13

MySQL에서 10부터 시작하여 1 씩 자동 증가하는 방법 :

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에서 시작하여 id 열이 1 씩 증가합니다.

10에서 시작하여 MySQL에서 5 씩 자동 증가 :

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'

이렇게하면 10에서 시작하여 id 열이 5 씩 증가합니다.


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을 사용하여 수행 할 수도 있습니다. 조치로 이동하는 것보다 테이블을 선택하십시오. 그리고 테이블 아래의 자동 증분 옵션을 변경하십시오. 시작을 클릭하는 것을 잊지 마십시오 phpmyadmin에서 자동 증가


-2

data.를 사용하여 테이블을 내 보냅니다.

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을 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.