MySQL에서 AUTO_INCREMENT를 재설정하는 방법은 무엇입니까?


1246

필드를 재설정 하려면 어떻게 AUTO_INCREMENT해야합니까? 다시
계산하기를 원합니다 1.



80
테이블을 비우고 싶을 수도 있습니다.TRUNCATE TABLE yourTableName;
Konerak


3
예,이 경우 테이블 잘라내 기가 가장 좋습니다. 또한 자동 증분 시작을 1로 재설정합니다.
raidsan

2
DROP 권한이 필요하므로 TRUNCATE 권한이없는 경우가 있습니다.
Luke Cousins

답변:


2024

다음을 사용하여 카운터를 재설정 할 수 있습니다.

ALTER TABLE tablename AUTO_INCREMENT = 1

InnoDB의 경우 auto_increment값을 최고 현재 인덱스보다 작거나 같게 설정할 수 없습니다 . ( ViralPatel 에서 인용 ) :

카운터를 이미 사용한 값보다 작거나 같은 값으로 재설정 할 수 없습니다. MyISAM의 경우, 값이 AUTO_INCREMENT 열에 현재있는 최대 값보다 작거나 같으면 현재 최대 값에 1을 더한 값으로 재설정됩니다. InnoDB의 경우, 값이 열의 현재 최대 값보다 작 으면 오류가 발생하지 않으며 현재 시퀀스 값이 변경되지 않습니다.

다른 테이블의 MAX 값을 사용하여 MySQL 자동 증분을 재설정하는 방법을 참조하십시오 . 허용 가능한 값을 동적으로 얻는 방법에 대해


8
테이블이 가득 차면 시간이 오래 걸릴 수 있습니다. 다음 사항에주의하십시오 : stackoverflow.com/questions/2681869/…
BT

52
이것은circular reference
Besnik

5
무슨 소리 야 curcular reference?
Niels

73
MySql은 동일한 구조와 새로운 auto_increment 값으로 새 테이블을 만들고 원본 테이블의 모든 레코드를 복사하고 원본을 삭제하고 새 테이블의 이름을 바꿉니다. 테이블이 큰 경우 프로덕션 환경에 상당한 성능 영향 (및 디스크 공간)이있을 수 있습니다.
Rostol

6
AUTOINCREMENT 열이 이미 있다면이 투표에 대한 답변이 실제로 효과가 있습니까? MySQL 5.1 문서에 따르면 "카운터는 이미 사용한 값보다 작거나 같은 값으로 카운터를 재설정 할 수 없습니다. MyISAM의 경우 값이 현재 AUTO_INCREMENT 열에있는 최대 값보다 작거나 같은 경우 InnoDB의 경우 값이 열의 현재 최대 값보다 작 으면 오류가 발생하지 않으며 현재 시퀀스 값은 변경되지 않습니다. " 자동 증가가 1보다 크면 아무 일도 일어나지 않을 것입니다.
lreeder

159
ALTER TABLE tablename AUTO_INCREMENT = 1

7
귀하의 답변과 이전 답변의 차이점이 무엇인지 알고 싶습니다.
Praveen Srinivasan

30
@PraveenSrinivasan 차이가 없습니다, 우리는 동시에 그것들을 추가했습니다
boobiq

79
개인적으로, 나는 AUTO_INCREMENT 질문에 대한이 두 가지 답변 동시성 충돌 :-) 있다고 아름다운 것입니다 생각
마크 Goldfain을

@MarkGoldfain 그렇습니다!
ncomputers

동시성은 mysql 경쟁 조건을 일으킬 것입니다 ...
Syamsoul Azrien

81
SET  @num := 0;

UPDATE your_table SET id = @num := (@num+1);

ALTER TABLE your_table AUTO_INCREMENT =1;

나는 이것이 할 것이라고 생각


2
이 질문에는 이미 적절한 답변이 있습니다. 또한 열의 UPDATE모든 값을 업데이트합니다 id.
커밋

2
OP는 기존 행을 다시 정렬하고 있다고 진술하지 않습니다.
커밋

완전하고 완벽한 답변. 그러나 새 값을 삽입하면 해당 값의 PK가 무엇인지 의심합니다. 1인지 아니면 다음 PK입니까?
Prifulnath

그래이 가장 좋은 방법이지만, 데이터가 예를 들어 생산 테이블을 writen되고이 경우 잠금 테이블을 할 수 있습니다
wavvves

매우 유용합니다 .1로 시작하도록 자동 증분을 재설정 해야하는 동일한 requirment가 있었으며 처음 두 명령 만 도움이되었습니다.
LOKENDRA


40

여기에 이미지 설명을 입력하십시오"operations"탭에서 phpmyadmin을 사용하는 매우 쉬운 방법이 있습니다. 테이블 옵션에서 원하는 숫자로 자동 증분을 설정할 수 있습니다.


그 직후 mysql 서비스 / 서버를 다시 시작해야합니다.
Cyber

1
그 후 서버를 다시 시작해야한다고 생각하지 않습니다. PhpAdmin은 명령을 실행하여 증분 시작점을 변경합니다.
Kareem

다시 시작할 필요는 없습니다. 다음 삽입부터 적용됩니다.
IlludiumPu36

36

나를 위해 일한 최고의 솔루션 :

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와 함께 작동하며 현재 최대 값을 알 필요가 없습니다! 이 방법으로 자동 증분 카운터가 재설정되고 최대 값이 존재하면 자동으로 시작됩니다.


1
information_schema에 NULL auto-inc 값을 설정합니다. 확인SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
K-Gun

1
버전 5.6.x에서 테스트했으며 완벽하게 작동했으며 Kerem Güneş의 쿼리는 명시된대로 최대 값에 1을 더한 값이 아닌 null을 반환했습니다. (첫 번째 쿼리 후에 null로 설정되었을 수도 있지만 두 번째 쿼리 이후에는 그렇지 않습니다.) 이것이 InnoDB에 가장 적합한 솔루션이라고 생각합니다.
Frank Forte

명시 적 값 설정과 동일 : "같은 구조와 새로운 auto_increment 값을 사용하여 새 테이블을 작성하고 원본 테이블에서 모든 레코드를 복사하고 원본을 삭제하고 새 테이블의 이름을 바꾸십시오. 이는 상당한 성능 영향 (및 디스크 공간)을 가질 수 있습니다. "테이블이 큰 생산 환경에서." 그러나 전체 복사 테이블이 두 번 필요하기 때문에 훨씬 더 나쁩니다.
Enyby

나는 이것이 버전 5.6.15에서 작동하는 것을 확인 하지만 ALTER TABLE tablename AUTO_INCREMENT = 1그렇지 않습니다 .
Nae

24

이 질문에 대한 가장 높은 답변은 "ALTER yourtable AUTO_INCREMENT = value"를 권장합니다. 그러나 이것은 valuealter에서 autoincrement 열의 현재 최대 값보다 큰 경우에만 작동합니다 . MySQL 8 문서에 따르면 :

카운터를 현재 사용중인 값보다 작거나 같은 값으로 재설정 할 수 없습니다. InnoDB 및 MyISAM의 경우, 값이 현재 AUTO_INCREMENT 열에있는 최대 값보다 작거나 같은 경우 값은 현재 최대 AUTO_INCREMENT 열 값에 1을 더한 값으로 재설정됩니다.

본질적으로 AUTO_INCREMENT 만 변경하여 자동 증분 열의 값을 늘리고 OP가 질문의 두 번째 부분에서 요구하는대로 1로 재설정하지는 않습니다. 실제로 AUTO_INCREMENT를 현재 최대 값에서 아래쪽으로 설정할 수있는 옵션에 대해서는 자동 증분 자동 재설정 기본 키 순서를 살펴보십시오 .


20

MySQL 5.6에서 기능이 변경되어 업데이트 추가 MySQL 5.6부터 InnoDB와 함께 간단한 ALTER TABLE을 사용할 수 있습니다.

ALTER TABLE tablename AUTO_INCREMENT = 1;

문서는 이것을 반영하여 업데이트됩니다.

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

내 테스트는 테이블이 복사되지 않고 값이 단순히 변경되었음을 보여줍니다.


19

MySQL 자동 증분 열을 재설정하는 방법에 좋은 옵션이 있습니다.

참고 ALTER TABLE tablename AUTO_INCREMENT = value;않습니다 하지 InnoDB의 작동


8
InnoDB로이 작업을 수행하는 방법은 무엇입니까?
EmptyArsenal

4
나 MySQL의 V 5.6.2을 사용하는 벌금을 작동
에디 B

테이블에서 레코드를 삭제 한 후 자동 증가 필드가 재설정되지 않는 비슷한 문제가 발생했습니다. TRUNCATE가 작동 한 것 같습니다. 자동 증가를 제거한 다음 다시 적용하는 아래의 솔루션이이를 완화하는 데 도움이 될 수 있다고 생각합니다.
Craig Maloney

@CraigMaloney- DELETE(또는 ROLLBACK)는 ID를 복구하지 않습니다. 한 가지 예외 : 재시작 (또는 충돌) 후 다음 ID는로 계산되어 결국MAX(id)+1 삭제 된 ID를 효과적으로 복구 합니다 . 예외 예외 : MySQL 8.0은 해당 ID를 사용하지 않은 상태로 둡니다.
Rick James

12
ALTER TABLE news_feed DROP id

ALTER TABLE news_feed ADD  id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)

필자는 일부 스크립트에서 이것을 사용했고, id 필드를 삭제 한 다음 이전 설정으로 다시 추가했으며, 데이터베이스 테이블에 존재하는 모든 필드는 새로운 자동 증분 값으로 채워져 있습니다. 이것은 InnoDB에서도 작동합니다.

테이블 내의 모든 필드가 계산되고 다른 ID가 있습니다. !!!.


3
이런 식으로하고 싶습니다! 그러나 추가 경고로; 이것은 분명히 외래 키를 완전히 깰 것입니다.
NoobishPro

12

TRUNCATE다음과 같이 구문 테이블을 사용할 수도 있습니다 . TRUNCATE TABLE table_name

조심해 !! TRUNCATE TABLE your_table모든 것을 삭제 하여에 your_table!


14
새로운 프로그래머 , 알고 그 TRUNCATE또한 것이다 당신의 모든 행을 삭제 지정된 테이블에!
Zanshin13

1
위의 주석은 답에 삽입하거나 최소한 잘라 내기의 실제 사용에 대한 설명에 삽입해야합니다.
루카스 카 우즈

TRUNCATEauto_increment필드도 재설정 합니까? 내 유스 케이스는 테이블 에서 이전 데이터 를 지우고 데이터에 대해 1부터 ID를 다시 시작하는 것입니다 (테스트가 완료된 후 올바른 사용을 위해 테이블 ​​지우기). 나는 DROP전체 테이블과 CREATE다시 해야한다고 생각 했다.
ADTC

예, TRUNCATE는 테이블의 재설정처럼 작동합니다. 테이블을 만든 후 테이블이 변경된 경우에는 해당 변경 사항이 재설정되지 않습니다. 테이블 구조를 내보내고 내보내기를 사용하여 실제 재설정보다 새 테이블을 만드는 것에 더 가깝다고 가정합니다.
크리스

예 @ADTC. 현재 값 을 유지auto_increment 하려면 DELETE FROM대신TRUNCATE .
TRiG

8

빈 테이블입니다.

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`);

이것을 사용하는 간단한
압둘 아지즈 알 Basyir

이것은 데이터로 우리에게 도움이되었습니다. 행을 다음 색인으로 재설정합니다. 감사!
대즐

Urwell @Dazzle!
압둘 아지즈 알 Basyir

5

여기 내 해결책이 있지만 열에 제약 조건이 있거나 나쁜 영향을 미치거나 작동하지 않을 수 있으므로 외래 키로 다른 테이블에 연결되어 있으면이 작업을 수행하지 않는 것이 좋습니다.

> 첫 번째 : 열을 삭제

ALTER TABLE tbl_name DROP COLUMN column_id

> 두 번째 : 열을 다시 작성하고 첫 번째 열로 원하면 FIRST로 설정하십시오.

ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST

이것은 잘 작동합니다!


3

MySQL 5.6부터 온라인 DDL (note algorithm=inplace) 로 인해 아래의 접근 방식이 더 빠르게 작동합니다 .

alter table tablename auto_increment=1, algorithm=inplace;


2

간단히 테이블을 잘라서 시퀀스를 재설정 할 수 있습니다.

TRUNCATE TABLE TABLE_NAME

1

테이블을 변경하고 auto_increment를 1로 설정했지만 작동하지 않았습니다. 증분하려는 열 이름을 삭제 한 다음 원하는 이름으로 새 열을 만들고 새 열을 시작부터 증가하도록 설정했습니다.


어떻게했는지 설명해 주실 수 있습니까?
MZaragoza

@MZaragoza AI가없는 기존 열을 삭제 한 다음 AI가 활성화 된 새 열을 만듭니다.
andromeda

이것을 표시하기 위해 답변을 업데이트 할 수 있습니까? 정말 감사하겠습니다
MZaragoza

1

테이블의 자동 증분 카운터는 두 가지 방법으로 (재) 설정 될 수 있습니다.

  1. 다른 사람들이 이미 설명한 것처럼 쿼리를 실행하면 다음과 같습니다.

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. Workbench 또는 기타 시각적 데이터베이스 디자인 도구를 사용합니다. Workbench에서 어떻게 수행되는지 보여 주려고하지만 다른 도구에서도 크게 다르지 않아야합니다. 원하는 테이블을 마우스 오른쪽 버튼으로 클릭 Alter table하고 상황에 맞는 메뉴에서 선택 하십시오. 맨 아래에는 테이블을 변경하는 데 사용 가능한 모든 옵션이 표시됩니다. 선택 Options하면이 양식을 얻게됩니다. 여기에 이미지 설명을 입력하십시오

    그런 다음 Auto increment이미지에 표시된대로 필드에서 원하는 값을 설정하십시오 . 기본적으로 첫 번째 옵션에 표시된 쿼리가 실행됩니다.


0

최신 플러스 하나의 ID를 업데이트하려면

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);


0

Google 에서이 질문을 찾았지만 실제로 찾고있는 답변은 두 가지 기준을 충족합니다.

  1. 순수 MySQL 쿼리 사용
  2. 기존 테이블 자동 증분을 max (id) + 1로 재설정

여기에서 내가 원하는 것을 정확하게 찾을 수 없으므로 다양한 답변에서 답을 모아서 여기에 공유했습니다.

몇 가지 참고할 사항 :

  1. 문제의 테이블은 InnoDB입니다
  2. 테이블은 id유형 int을 기본 키로 사용하여 필드 를 사용합니다.
  3. MySQL 에서이 작업을 수행하는 유일한 방법은 저장 프로 시저를 사용하는 것입니다
  4. 아래 이미지는 SequelPro를 GUI로 사용하고 있습니다. 선호하는 MySQL 편집기를 기반으로 조정할 수 있어야합니다.
  5. 나는 이것을 debian-linux-gnu 용 MySQL Ver 14.14 Distrib 5.5.61에서 테스트했습니다.

1 단계 : 저장 프로 시저 생성

다음과 같은 저장 프로 시저를 만듭니다.

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 ;

그런 다음 실행하십시오.

실행하기 전에 데이터베이스의 저장 프로 시저를 보면 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

실행할 때 저장 프로 시저를 선택하고 선택 실행을 누릅니다.

여기에 이미지 설명을 입력하십시오

참고 : 구분 기호 부분이 중요합니다. 따라서이 질문에서 가장 많이 선택한 답변을 복사하여 붙여 넣으면 이러한 이유로 작동하지 않는 경향이 있습니다.

실행 한 후 저장 프로 시저가 표시됩니다

여기에 이미지 설명을 입력하십시오

저장 프로 시저를 변경해야하는 경우 저장 프로 시저를 삭제 한 다음 다시 실행하도록 선택해야합니다.

2 단계 : 저장 프로 시저 호출

이번에는 단순히 일반적인 MySQL 쿼리를 사용할 수 있습니다.

call reset_autoincrement('products');

원래 https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc 의 자체 SQL 쿼리 노트에서 StackOverflow에 맞게 조정되었습니다.


0
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;

-1

이 쿼리를 실행 해보십시오

 ALTER TABLE tablename AUTO_INCREMENT = value;

또는 자동 증가 재설정에 대해이 쿼리를 사용해보십시오.

 ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;

자동 증분을 설정 한 다음이 쿼리를 실행하십시오.

  ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;

-2

Query Browser로 이동하여 다음을 수행하십시오.

  1. schemata로 이동하여 변경하려는 테이블을 찾으십시오.
  2. 마우스 오른쪽 단추를 클릭하고 사본 작성 명령문을 선택하십시오.
  3. 결과 탭을 열고 create 문을 붙여 넣습니다.
  4. create 문의 마지막 줄로 이동하여 Auto_Increment = N을 찾습니다 (여기서 N은 auto_increment 필드의 현재 번호입니다).
  5. N을 1로 바꿉니다.
  6. ctrl+를enter 누릅니다 .

테이블에 새 행을 입력하면 Auto_increment가 1로 재설정됩니다.

auto_increment 필드 값이 이미 존재하는 행을 추가하려고하면 어떻게 될지 모르겠습니다.

이 도움을 바랍니다!


-2

가장 좋은 방법은 AI로 필드를 제거하고 AI로 다시 추가하는 것입니다. 모든 테이블에서 작동합니다.


1
전혀없는 가장 좋은 방법은, 열 데이터를 잃게됩니다 열을 떨어 뜨리고
Disha 고얄을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.