MySQL 데이터베이스의 모든 테이블의 AUTO_INCREMINT 값 업데이트
/합니다를 할 수 .AUTO_INCREMENT
해 MySQL을 통한 의 값
ALTER TABLE some_table AUTO_INCREMENT = 1000
하지만 나는 그것을 설정할 필요가 있습니다.AUTO_INCREMENT
( 복제 M-M ) 합니다.
ALTER TABLE some_table SET AUTO_INCREMENT = AUTO_INCREMENT + 1
하지 않는
사실 데이터베이스 내의 모든 테이블에 대해 이 쿼리를 실행하고 싶습니다.하지만 사실 이것은 그다지 중요하지 않습니다.
수동으로 쿼리를 실행하는 것 외에는 이 문제를 해결할 방법을 찾을 수 없었습니다.제안해 주시거나 몇 가지 아이디어를 말씀해 주시겠습니까?
감사해요.
사용방법:
ALTER TABLE some_table AUTO_INCREMENT = 0
...auto_increment 값이 auto_increment 열의 기존 값 중 가장 높은 값을 기준으로 다음 값으로 재설정됩니다.
이를 모든 테이블에서 실행하려면 변수로 ALTER TABLE 문에 대한 테이블 이름을 제공할 수 없으므로 PreparedStatements라는 MySQL의 동적 SQL 구문을 사용해야 합니다.다음의 출력을 루프오버해야 합니다.
SELECT t.table_name
FROM INFORMATION_SCHEMA.TABLES t
WHERE t.table_schema = 'your_database_name'
...각 테이블에 대해 위의 ALTERTABLE 문을 실행합니다.
set @db = 'your_db_name';
SELECT concat('ALTER TABLE ', @db, '.', TABLE_NAME, ' AUTO_INCREMENT = 0;')
FROM information_schema.TABLES WHERE TABLE_SCHEMA = @db AND TABLE_TYPE = 'BASE TABLE'
그런 다음 복사 붙여넣기를 하고 출력물을 실행합니다.
아래 지침에서 [브라켓]에 있는 모든 것을 올바른 값으로 교체해야 합니다.시도하기 전에 백업합니다.
명령줄을 통해 mysql에 root으로 로그인할 수 있는 경우 다음 작업을 수행하여 모든 테이블에서 auto_increment를 재설정할 수 있습니다. 먼저 실행할 쿼리를 구성합니다.
데이터베이스 백업 만들기:
mysqldump -u [uname] -p [dbname] | gzip -9 > [backupfile.sql.gz]
로그인:
mysql -u root -p
쿼리 목록이 잘리지 않도록 group_concat_max_length를 더 높은 값으로 설정합니다.
SET group_concat_max_len=100000;
다음을 사용하여 쿼리 목록을 만듭니다.
SELECT GROUP_CONCAT(CONCAT("ALTER TABLE ", table_name, " AUTO_INCREMENT = 0") SEPARATOR ";") FROM information_schema.tables WHERE table_schema = "[DATABASENAME]";
그러면 긴 문자열의 mysql 쿼리를 받은 후 대시를 많이 받게 됩니다.쿼리 문자열을 클립보드에 복사하면 다음과 유사합니다.
ALTER table1 AUTO_INCREMENT = 0;ALTER table2 AUTO_INCREMENT = 0;...continued...
명령을 실행할 데이터베이스를 변경합니다.
USE [DATABASENAME];
그런 다음 클립보드에 있는 문자열을 붙여넣고 Enter 키를 눌러 실행합니다.이렇게 하면 데이터베이스의 모든 테이블에서 변경사항이 실행됩니다.
? 하십시오. , 하십시오 ). 다음을 실행하기 전에 mysql에서 로그아웃해야 합니다.exit;
하기 위하여)
gzip -d < [backupfile.sql.gz] | mysql -u [uname] -p [dbname]
이 명령을 사용함으로써 발생하는 피해에 대해서는 책임을 지지 않습니다. 자신의 책임으로 사용하십시오.
github에서 이 요지를 찾았는데 저에게 매력적으로 작용했습니다. https://gist.github.com/abhinavlal/4571478
명령:
mysql -Nsr -e "SELECT t.table_name FROM INFORMATION_SCHEMA.TABLES t WHERE t.table_schema = 'DB_NAME'" | xargs -I {} mysql DB_NAME -e "ALTER TABLE {} AUTO_INCREMENT = 1;"
DB에 암호가 필요한 경우 유감스럽게도 명령어에 암호를 입력해야 작동할 수 있습니다.한 가지 해결 방법은 암호를 보안 파일에 넣는 것입니다.암호가 명령 기록에 남지 않도록 파일을 삭제할 수 있습니다.
... | xargs -I {} mysql -u root -p`cat /path/to/pw.txt` DB_NAME -e...
N:M 관계를 분해하는 테이블의 외부 키가 아닌 자동 증가 열을 수정하여 이 문제를 해결해야 하고 올바른 값이 무엇인지 예측할 수 있다고 가정할 때, 관련 열이 자동 증가가 아닌 임시 테이블을 사용해 보고 이를 원래 테이블 대신 다시 매핑하고 열 유형을 변경합니다.e는 나중에 자동으로 increment하거나 원래 테이블을 잘라내고 임시 테이블에서 데이터를 로드합니다.
아래 절차서 데이터베이스 이름을 변경하고 절차를 실행합니다.
CREATE DEFINER=`root`@`localhost` PROCEDURE `setAutoIncrement`()
BEGIN
DECLARE done int default false;
DECLARE table_name CHAR(255);
DECLARE cur1 cursor for SELECT t.table_name FROM INFORMATION_SCHEMA.TABLES t
WHERE t.table_schema = "buzzer_verifone";
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open cur1;
myloop: loop
fetch cur1 into table_name;
if done then
leave myloop;
end if;
set @sql = CONCAT('ALTER TABLE ',table_name, ' AUTO_INCREMENT = 1');
prepare stmt from @sql;
execute stmt;
drop prepare stmt;
end loop;
close cur1;
END
아래 라인을 사용하여 위의 절차를 실행합니다.
Call setAutoIncrement();
MySQL 데이터베이스에서 AUTO_INCRECTION을 업데이트/재설정하는 가장 빠른 솔루션
다음을 확인합니다.AUTO_INCREMENT
열이 a로 사용되지 않았습니다.FOREIGN_KEY
다른 테이블에
첫번째로 드랍.AUTO_INCREMENT
컬럼 이름:
ALTER TABLE table_name DROP column_name
예:ALTER TABLE payments DROP payment_id
그런 다음 열을 다시 추가하고 테이블의 첫 번째 열로 이동합니다.
ALTER TABLE table_name ADD column_name DATATYPE AUTO_INCREMENT PRIMARY KEY FIRST
예:ALTER TABLE payments ADD payment_id INT AUTO_INCREMENT PRIMARY KEY FIRST
Reset mysql 테이블 자동 증분은 매우 쉬웠습니다. 단일 쿼리로 할 수 있습니다. 이 http://webobserve.blogspot.com/2011/02/reset-mysql-table-autoincrement.html 를 참조하십시오.
언급URL : https://stackoverflow.com/questions/3595584/updating-auto-increment-value-of-all-tables-in-a-mysql-database
'IT' 카테고리의 다른 글
WP OEM 스크립트를 _content 외부에서 사용하는 방법 (0) | 2023.10.05 |
---|---|
함수 서명에서 제한의 의미는 무엇입니까? (0) | 2023.10.05 |
HikariCP 리소스 사용 시도 연결 누수 (0) | 2023.10.05 |
LINQ SelectMany 메서드와 동등한 PowerShell (0) | 2023.10.05 |
C#에서 기본 네임스페이스와 함께 Xpath 사용 (0) | 2023.10.05 |