programing

MariaDB AUTO_INCREMENT 최대값(부호 없음)으로 점프

copysource 2022. 10. 1. 15:14
반응형

MariaDB AUTO_INCREMENT 최대값(부호 없음)으로 점프

편집: 그것은 버그인 또는 어플리케이션이었다.

auto_increment 값이 최대 int에 도달하기 위해 수십억 개의 값을 점프하는 원인은 무엇입니까?

델의 코어 테이블은int unsigned auto_increment[ Primary Key ]카람을 표시합니다.오늘은 4294967295까지 모든 값을 건너뛰었습니다.

공격 행을 삭제하고 실행함으로써 이 문제를 해결할 수 있었습니다.

ALTER TABLE [table] AUTO_INCREMENT = [new value];

어떻게, 왜 그런 일이 일어났는지 설명할 수 없어요

당사의 환경은 PHP/Apache의 MariaDB 10.2.27입니다.

임의의 INSERT는 높은 값을 지정할 수 있으며, 이는 암묵적으로 다음 자동 증분 값을 진행합니다.즉, 테이블의 자동 인크리먼트는 테이블에 현재 삽입되어 있는 최대값보다 작지 않습니다.클라이언트는 INSERT에 값을 지정하는 것만으로 자동 인크리먼트메커니즘을 덮어쓸 수 있습니다.

데모:

mysql> create table mytable (id int unsigned auto_increment primary key);

mysql> insert into mytable (id) values (DEFAULT);
Query OK, 1 row affected (0.01 sec)

ID 값 1이 삽입되어 있어야 하므로 다음 AI는 2가 됩니다.

mysql> show create table mytable\G
*************************** 1. row ***************************
       Table: mytable
Create Table: CREATE TABLE `mytable` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4

큰 값을 지정하면 그에 따라 AI가 업데이트됩니다.

mysql> insert into mytable (id) values(1000000000);
Query OK, 1 row affected (0.01 sec)

mysql> show create table mytable\G
*************************** 1. row ***************************
       Table: mytable
Create Table: CREATE TABLE `mytable` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000000001 DEFAULT CHARSET=utf8mb4

부호 없는 최대 int 값 2-1보다 큰 값은 해당32 값으로 잘립니다.

mysql> insert into mytable (id) values(1000000000000);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show create table mytable\G
*************************** 1. row ***************************
       Table: mytable
Create Table: CREATE TABLE `mytable` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4294967295 DEFAULT CHARSET=utf8mb4

누군가 큰 값을 삽입한 게 틀림없어요4294967295보다 큰 값은 4294967295로 잘리고 이후 AI 시퀀스를 사용하려고 하면 실패합니다.

언급URL : https://stackoverflow.com/questions/59400794/mariadb-auto-increment-jump-to-max-unsigned-int

반응형