IT

MySQL 데이터베이스의 모든 테이블의 AUTO_INCREMINT 값 업데이트

itgroup 2023. 10. 5. 21:31
반응형

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

반응형