필드의 AUTO_INCREMENT
를 어떻게 재설정 합니까?
1
부터 다시 계산하기를 원합니다.
질문자 :homerun
필드의 AUTO_INCREMENT
를 어떻게 재설정 합니까?
1
부터 다시 계산하기를 원합니다.
다음을 사용하여 카운터를 재설정할 수 있습니다.
ALTER TABLE tablename AUTO_INCREMENT = 1
InnoDB의 auto_increment
값을 가장 높은 현재 인덱스보다 낮거나 같게 설정할 수 없습니다. (ViralPatel 에서 인용):
카운터는 이미 사용된 값보다 작거나 같은 값으로 재설정할 수 없습니다. MyISAM의 경우 값이 현재 AUTO_INCREMENT 열에 있는 최대값보다 작거나 같으면 값은 현재 최대값에 1을 더한 값으로 재설정됩니다. InnoDB의 경우 값이 현재 컬럼의 최대값보다 작으면 오류가 발생하지 않고 현재 시퀀스 값이 변경되지 않습니다.
다른 테이블의 MAX 값을 사용하여 MySQL AutoIncrement를 재설정하려면 어떻게 해야 합니까?를 참조하십시오. 허용 가능한 값을 동적으로 얻는 방법에 대해 설명합니다.
SET @num := 0; UPDATE your_table SET id = @num := (@num+1); ALTER TABLE your_table AUTO_INCREMENT =1;
나는 이것이 그것을 할 것이라고 생각한다
"작업" 탭에서 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와 함께 작동하며 현재 최대값을 알 필요가 없습니다!
이 방법. 자동 증가 카운터가 재설정되고 최대값이 존재하는 시점부터 자동으로 시작됩니다.
이 질문에 대한 최고 평점 답변은 모두 "ALTER yourtable AUTO_INCREMENT= value"를 권장합니다. 그러나,이 경우에만 작동 value
바꾼다으로는 자동 증가 컬럼의 현재 최대 값보다 큽니다. MySQL 8 문서에 따르면 :
카운터를 현재 사용 중인 값보다 작거나 같은 값으로 재설정할 수 없습니다. InnoDB와 MyISAM 모두에서 값이 현재 AUTO_INCREMENT 열에 있는 최대값보다 작거나 같으면 값은 현재 최대 AUTO_INCREMENT 열 값에 1을 더한 값으로 재설정됩니다.
본질적으로 OP가 질문의 두 번째 부분에서 묻는 것처럼 AUTO_INCREMENT를 변경하여 자동 증가 열의 값을 늘릴 수만 있고 1로 재설정할 수 없습니다. 실제로 AUTO_INCREMENT를 현재 최대값에서 아래쪽으로 설정할 수 있는 옵션에 대해서는자동 증가 기본 키 재정렬/재설정을 살펴보세요.
MySQL 5.6부터 InnoDB와 함께 간단한 ALTER TABLE을 사용할 수 있습니다.
ALTER TABLE tablename AUTO_INCREMENT = 1;
이를 반영하도록 설명서가 업데이트되었습니다.
내 테스트는 또한 테이블이 복사 되지 않음을 보여줍니다. 값은 단순히 변경됩니다.
MySQL 자동 증가 열을 재설정하는 방법에 좋은 옵션이 있습니다.
ALTER TABLE tablename AUTO_INCREMENT = value;
InnoDB 에서는 작동하지 않습니다
다음과 같이 TRUNCATE
테이블 구문을 사용할 수도 있습니다.
TRUNCATE TABLE table_name
조심해! TRUNCATE TABLE your_table
당신의 모든 것을 삭제합니다 your_table
.
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 `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`);
MySQL 5.6부터 온라인 DDL algorithm=inplace
참고)로 인해 아래 접근 방식이 더 빠르게 작동합니다.
alter table tablename auto_increment=1, algorithm=inplace;
여기 내 솔루션이 있지만 열에 제약 조건이 있거나 다른 테이블에 외래 키로 연결된 경우에는 이 작업을 수행하지 않는 것이 좋습니다.
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
이것은 잘 작동합니다!
SET @num := 0; UPDATE your_table SET id = @num := (@num+1); ALTER TABLE your_table AUTO_INCREMENT =1;
테이블의 자동 증가 카운터는 두 가지 방법으로 (재)설정할 수 있습니다.
다른 사람들이 이미 설명한 것처럼 쿼리를 실행하여:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Workbench 또는 다른 시각적 데이터베이스 디자인 도구 사용. 어떻게 되는지 Workbench에서 보여주겠지만 다른 도구에서도 크게 다르지 않을 것입니다. 원하는 테이블을 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 Alter table
하단에는 테이블 변경에 사용할 수 있는 모든 옵션이 표시됩니다. Options
선택하면 다음 양식이 표시됩니다.
그런 다음 이미지와 같이 Auto increment
필드에서 원하는 값을 설정하기만 하면 됩니다. 이것은 기본적으로 첫 번째 옵션에 표시된 쿼리를 실행합니다.
테이블을 변경하고 auto_increment를 1로 설정하려고 시도했지만 작동하지 않았습니다. 늘리고 있던 열 이름을 삭제한 다음 원하는 이름으로 새 열을 만들고 해당 새 열이 시작될 때부터 증가하도록 설정하기로 결정했습니다.
순서를 재설정하기 위해 테이블을 자르기만 하면 됩니다.
TRUNCATE TABLE TABLE_NAME
최신 + 하나의 ID로 업데이트하려면:
ALTER TABLE table_name AUTO_INCREMENT = (SELECT (id+1) id FROM table_name order by id desc limit 1);
편집하다:
SET @latestId = SELECT id FROM table_name order by id desc limit 1; SET @latestIdPlusOne = @latestId + 1; ALTER TABLE table_name AUTO_INCREMENT = @latestIdPlusOne;
테스트되지 않음 실행하기 전에 테스트하십시오*
ALTER TABLE 테이블 이름 AUTO_INCREMENT = 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;
나는 구글링하여이 질문을 찾았지만 내가 정말로 찾고있는 대답은 두 가지 기준을 충족합니다.
여기서 내가 원하는 것을 정확히 찾을 수 없었기 때문에 다양한 답변에서 답변을 자갈로 만들어 여기에 공유합니다.
주의할 사항:
int
유형 id
를 사용합니다.다음과 같은 저장 프로 시저를 만듭니다.
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');
원래 내 SQL 쿼리는 https://simkimsia.com/reset-mysql-autoincrement-to-max-id-plus-1/에 나와 있으며 스택 오버플로에 맞게 조정되었습니다.
가장 좋은 방법은 AI로 필드를 제거하고 AI로 다시 추가하는 것입니다. 모든 테이블에서 작동합니다.
Miles M의 의견에 따른 조언을 따라야 하며 여기에 MySQL의 범위를 수정하는 일부 PHP 코드가 있습니다. 또한 my.ini 파일(MySQL)을 열고 max_execution_time=60을 max_execution_time=6000으로 변경해야 합니다. 큰 데이터베이스의 경우.
"ALTER TABLE 테이블 이름 AUTO_INCREMENT = 1"을 사용하지 마십시오. 데이터베이스의 모든 항목이 삭제됩니다.
$con = mysqli_connect($dbhost, $dbuser, $dbpass, $database); $res = mysqli_query($con, "select * FROM data WHERE id LIKE id ORDER BY id ASC"); $count = 0; while ($row = mysqli_fetch_array($res)){ $count++; mysqli_query($con, "UPDATE data SET id='".$count."' WHERE id='".$row['id']."'"); } echo 'Done reseting id'; mysqli_close($con);
쿼리 브라우저 로 이동하여 다음을 수행하는 것이 좋습니다.
schemata로 이동하여 변경할 테이블을 찾으십시오.
마우스 오른쪽 버튼을 클릭하고 명령문 복사를 선택하십시오.
결과 탭을 열고 create 문을 붙여넣습니다.
create 문의 마지막 줄로 이동하여 Auto_Increment=N을 찾습니다. 여기서 N은 auto_increment 필드의 현재 숫자입니다.
N을 1로 바꿉니다.
Ctrl + Enter를 누릅니다 .
Auto_increment 는 테이블에 새 행을 입력하면 1로 재설정되어야 합니다.
auto_increment 필드 값이 이미 존재하는 행을 추가하려고 하면 어떻게 될지 모르겠습니다.
출처 : http:www.stackoverflow.com/questions/8923114/how-to-reset-auto-increment-in-mysql
목록 이해로 사전 만들기 (0) | 2022.03.04 |
---|---|
Git 리포지토리에서 .DS_Store 파일을 제거하려면 어떻게 해야 합니까? (0) | 2022.03.04 |
C++에서 가상 함수가 필요한 이유는 무엇입니까? (0) | 2022.03.04 |
'정적 읽기 전용' 대 'const' (0) | 2022.03.04 |
"python -m SimpleHTTPServer"에 해당하는 Python 3은 무엇입니까? (0) | 2022.03.04 |