최대값 - mysql column auto_increment




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

필드의 AUTO_INCREMENT재설정 하려면 어떻게해야합니까? 다시 1 에서부터 계산을 시작하겠습니다.


"작업"탭 아래에 phpmyadmin을 사용하면 매우 쉬운 방법이 있습니다. 테이블 옵션에서 원하는 번호로 자동 증가를 설정할 수 있습니다.


ALTER TABLE tablename AUTO_INCREMENT = 1


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

  1. schemata로 이동하여 변경할 테이블을 찾으십시오.
  2. 마우스 오른쪽 버튼을 클릭하고 create statement를 선택하십시오.
  3. 결과 탭을 열고 create 문을 붙여 넣습니다.
  4. create 문 마지막 줄로 가서 Auto_Increment = N을 찾습니다. 여기서 N은 auto_increment 필드의 현재 번호입니다.
  5. N을 1로 바꾸십시오.
  6. ctrl + enter를 누릅니다.

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

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

희망이 도움이!


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


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

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. 순전히 MySQL 쿼리를 사용하여
  2. 기존 테이블 자동 증가를 max (id) + 1로 재설정합니다.

나는 내가 원하는 것을 정확히 찾을 수 없기 때문에 다양한 대답에서 답을 맺어서 여기에서 공유했습니다.

몇 가지 유의 사항 :

  1. 문제의 테이블은 InnoDB이다.
  2. 테이블은 기본 키로 int 유형의 필드 id 를 사용합니다.
  3. 순전히 MySQL에서 이것을 수행하는 유일한 방법은 저장 프로 시저를 사용하는 것이다.
  4. 내 이미지는 SequelPro를 GUI로 사용하고 있습니다. 원하는 MySQL 편집기를 기반으로 조정할 수 있어야합니다.
  5. debian-linux-gnu에 대해 MySQL 버전 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 ;

그런 다음 실행하십시오.

실행하기 전에 데이터베이스의 저장 프로 시저 (Stored Procedures)를 보면이 모양이됩니다.

실행하면 저장 프로 시저를 선택하고 선택 항목 실행을 누르기 만하면됩니다.

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

내가 실행 한 후에, 나는 저장 프로 시저를보아야 만한다.

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

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

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

call reset_autoincrement('products');

원래 내 자신의 SQL 쿼리 노트에서 https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc 및 적응


다음과 같이 카운터를 재설정 할 수 있습니다.

ALTER TABLE tablename AUTO_INCREMENT = 1

InnoDB의 경우 auto_increment 값을 가장 높은 현재 색인보다 낮거나 같게 설정할 수 없습니다. ( ViralPatel 에서 인용) :

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

다른 테이블의 MAX 값을 사용하여 MySQL AutoIncrement를 재설정하는 방법을 참조하십시오 . 동적으로 수용 할 수있는 값을 얻는 방법.


시퀀스를 재설정하기 위해 테이블을자를 수 있습니다.

TRUNCATE TABLE TABLE_NAME

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

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

본질적으로 OP가 질문의 두 번째 부분에서 묻는 것처럼 AUTO_INCREMENT 만 변경하여 autoincrement 열의 값을 1로 재설정하지 않고 변경할 수 있습니다. 실제로 현재의 최대 값에서 AUTO_INCREMENT를 낮추도록하는 옵션을 보려면 자동 증가 기본 키의 재정렬 / 재설정을 살펴보십시오.


최신 ID 하나를 업데이트하려면

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

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

  1. 이미 설명 된 다른 쿼리와 마찬가지로 쿼리를 실행하여

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. Workbench 또는 기타 시각적 데이터베이스 디자인 도구 사용. Workbench에서 어떻게 수행되는지 보여 드리겠습니다.하지만 다른 도구에서도 크게 다를 수 없습니다. 원하는 테이블을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 Alter table 선택하십시오. 맨 아래에서 테이블을 변경할 수있는 모든 옵션을 볼 수 있습니다. Options 선택하면 다음 양식을 받게됩니다.

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


ViralPatel 있는 좋은 옵션이 있습니다.

참고 ALTER TABLE tablename AUTO_INCREMENT = value; InnoDB에서 작동하지 않는다.


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를 갖습니다 !!!.


ALTER TABLE tablename AUTO_INCREMENT = 1




auto-increment