필드를 재설정 하려면 어떻게 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 열에 현재있는 최대 값보다 작거나 같으면 현재 최대 값에 1을 더한 값으로 재설정됩니다. InnoDB의 경우, 값이 열의 현재 최대 값보다 작 으면 오류가 발생하지 않으며 현재 시퀀스 값이 변경되지 않습니다.
다른 테이블의 MAX 값을 사용하여 MySQL 자동 증분을 재설정하는 방법을 참조하십시오 . 허용 가능한 값을 동적으로 얻는 방법에 대해
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로 대체 할 수 있습니다.
"operations"탭에서 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
그렇지 않습니다 .
이 질문에 대한 가장 높은 답변은 "ALTER yourtable AUTO_INCREMENT = value"를 권장합니다. 그러나 이것은 value
alter에서 autoincrement 열의 현재 최대 값보다 큰 경우에만 작동합니다 . MySQL 8 문서에 따르면 :
카운터를 현재 사용중인 값보다 작거나 같은 값으로 재설정 할 수 없습니다. InnoDB 및 MyISAM의 경우, 값이 현재 AUTO_INCREMENT 열에있는 최대 값보다 작거나 같은 경우 값은 현재 최대 AUTO_INCREMENT 열 값에 1을 더한 값으로 재설정됩니다.
본질적으로 AUTO_INCREMENT 만 변경하여 자동 증분 열의 값을 늘리고 OP가 질문의 두 번째 부분에서 요구하는대로 1로 재설정하지는 않습니다. 실제로 AUTO_INCREMENT를 현재 최대 값에서 아래쪽으로 설정할 수있는 옵션에 대해서는 자동 증분 자동 재설정 기본 키 순서를 살펴보십시오 .
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
내 테스트는 테이블이 복사되지 않고 값이 단순히 변경되었음을 보여줍니다.
MySQL 자동 증분 열을 재설정하는 방법에 좋은 옵션이 있습니다.
참고 ALTER TABLE tablename AUTO_INCREMENT = value;
않습니다 하지 InnoDB의 작동
DELETE
(또는 ROLLBACK
)는 ID를 복구하지 않습니다. 한 가지 예외 : 재시작 (또는 충돌) 후 다음 ID는로 계산되어 결국MAX(id)+1
삭제 된 ID를 효과적으로 복구 합니다 . 예외 예외 : MySQL 8.0은 해당 ID를 사용하지 않은 상태로 둡니다.
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가 있습니다. !!!.
TRUNCATE
다음과 같이 구문 테이블을 사용할 수도 있습니다 .
TRUNCATE TABLE table_name
조심해 !! TRUNCATE TABLE your_table
것 모든 것을 삭제 하여에 your_table
!
TRUNCATE
또한 것이다 당신의 모든 행을 삭제 지정된 테이블에!
TRUNCATE
auto_increment
필드도 재설정 합니까? 내 유스 케이스는 테이블 에서 이전 데이터 를 지우고 새 데이터에 대해 1부터 ID를 다시 시작하는 것입니다 (테스트가 완료된 후 올바른 사용을 위해 테이블 지우기). 나는 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
이것은 잘 작동합니다!
테이블의 자동 증분 카운터는 두 가지 방법으로 (재) 설정 될 수 있습니다.
다른 사람들이 이미 설명한 것처럼 쿼리를 실행하면 다음과 같습니다.
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Workbench 또는 기타 시각적 데이터베이스 디자인 도구를 사용합니다. Workbench에서 어떻게 수행되는지 보여 주려고하지만 다른 도구에서도 크게 다르지 않아야합니다. 원하는 테이블을 마우스 오른쪽 버튼으로 클릭 Alter table
하고 상황에 맞는 메뉴에서 선택 하십시오. 맨 아래에는 테이블을 변경하는 데 사용 가능한 모든 옵션이 표시됩니다. 선택 Options
하면이 양식을 얻게됩니다.
그런 다음 Auto increment
이미지에 표시된대로 필드에서 원하는 값을 설정하십시오 . 기본적으로 첫 번째 옵션에 표시된 쿼리가 실행됩니다.
Google 에서이 질문을 찾았지만 실제로 찾고있는 답변은 두 가지 기준을 충족합니다.
여기에서 내가 원하는 것을 정확하게 찾을 수 없으므로 다양한 답변에서 답을 모아서 여기에 공유했습니다.
몇 가지 참고할 사항 :
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 의 자체 SQL 쿼리 노트에서 StackOverflow에 맞게 조정되었습니다.
이 쿼리를 실행 해보십시오
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;
Query Browser로 이동하여 다음을 수행하십시오.
테이블에 새 행을 입력하면 Auto_increment가 1로 재설정됩니다.
auto_increment 필드 값이 이미 존재하는 행을 추가하려고하면 어떻게 될지 모르겠습니다.
이 도움을 바랍니다!