>  기사  >  데이터 베이스  >  MySQL 자동 증가 필드 값에 대한 자세한 소개(코드 포함)

MySQL 자동 증가 필드 값에 대한 자세한 소개(코드 포함)

不言
不言앞으로
2018-12-15 10:44:493548검색

이 글에서는 MySQL의 자동 증가 필드 값(코드 포함)에 대해 자세히 소개합니다. 특정 참조 값이 있으므로 도움이 필요한 분들에게 도움이 되기를 바랍니다.

1 서문

이 글은 Sifou에 올라온 한 네티즌의 질문에 답변한 글입니다. 이 네티즌은 새 테이블을 생성하고 auto_increment_increment를 10으로 설정하고 AUTO_INCREMENT 기본 키의 시작 값을 9로 설정했습니다. 데이터를 삽입하면, 그는 기본 키 값을 찾았습니다. 11시에 시작했기 때문에 혼란 스러웠습니다. 이 문서에서는 자동 증가 필드 문제에 대해 설명합니다.

2 증가하는 필드의 단계 크기, 즉 매번 추가되는 양입니다. auto_increment_increment 및 auto_increment_offset은 기본 키 중복을 방지하기 위해 마스터-마스터 복제에 자주 사용됩니다. auto_increment_increment는 1~65535 값을 갖는 Integer 타입이다. 0으로 설정하면 1로 변경되고, 설정값이 값 범위를 초과하면 65535로 변경된다. 자동 증가 필드의 값은 auto_increment_offset + N × auto_increment_increment 공식을 통해 계산되며, N은 [1,2,3,...]과 유사한 증가 수열입니다. 데이터 조각을 삽입할 때 데이터베이스는 auto_increment_offset + N × auto_increment_increment로 계산된 증분 시퀀스에서 현재 AUTO_INCREMENT보다 크거나 같은 가장 작은 요소를 필드의 다음 자동 증분 값으로 사용합니다.

auto_increment_increment는 동적으로 변경될 수 있지만 자동 증가 필드의 값을 계산할 때 기존 데이터의 영향을 받지 않으며 계산 방법도 변경되지 않습니다.

몇 가지 테스트를 해보겠습니다

db83-3306>>SET @@auto_increment_increment=10;
Query OK, 0 rows affected (0.00 sec)

db83-3306>>SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 10    |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set (0.00 sec)

db83-3306>>CREATE TABLE autoinc1(
    ->     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> ) engine=InnoDB;
Query OK, 0 rows affected (0.01 sec)

db83-3306>>INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

db83-3306>>select * from autoinc1;
+----+
| id |
+----+
|  1 |
| 11 |
| 21 |
| 31 |
+----+
4 rows in set (0.00 sec)

먼저 자동 증가 필드가 포함된 테이블을 만들고 단계 크기를 10으로 설정한 다음 데이터를 삽입하고 증가가 실제로 수식에서 계산된 값임을 확인했습니다. 다음으로, 테이블 생성 시 AUTO_INCREMENT 설정이 영향을 미치는지 테스트해 보겠습니다

db83-3306>>CREATE TABLE autoinc2(
    ->     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> ) engine=InnoDB AUTO_INCREMENT=8;
Query OK, 0 rows affected (0.01 sec)

db83-3306>>INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

db83-3306>>select * from autoinc2;
+----+
| id |
+----+
| 11 |
| 21 |
| 31 |
| 41 |
+----+
4 rows in set (0.00 sec)

AUTO_INCREMENT 값을 설정해도 자동 증가 필드 계산에는 영향을 주지 않는 것을 확인할 수 있습니다

3 기타 상황

위는 정상적인 상황입니다. 의 값은 비공동 인덱스의 첫 번째 필드입니다. 이 경우 자동 증가 필드의 값은 MAX(auto_increment_column) + auto_increment_offset WHERE prefix=given-prefix 입니다. 이해하는 방법은 성장 값을 계산할 때 조인트 인덱스 auto 앞에 필드를 그룹화한다는 것입니다. -증분 필드. 그룹 내에서 독립적인 성장 계산을 수행합니다.

예를 들어 a, b, c에 대해 공동 인덱스를 만들고 c가 자동 증가 필드인 경우 a=xx 및 b=xx 조건에서 데이터에 대해 독립적인 성장 계산을 수행합니다. 다음은 그 예입니다.

db83-3306>>CREATE TABLE user_pets (
    ->     name varchar(16) NOT NULL,
    ->     id_inc INT NOT NULL AUTO_INCREMENT,
    ->     pets varchar(16) NOT NULL,
    ->     PRIMARY KEY (name, id_inc)
    -> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)

db83-3306>>INSERT INTO user_pets(name, pets) VALUES
    -> ('chengqm', 'dog'),
    -> ('chengqm', 'cat'),
    -> ('chengqm', 'fish'),
    -> ('yexm', 'dog'),
    -> ('yexm', 'cat'),
    -> ('yexm', 'fish');
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

db83-3306>>SELECT * FROM user_pets;
+---------+--------+------+
| name    | id_inc | pets |
+---------+--------+------+
| chengqm |      1 | dog  |
| chengqm |     11 | cat  |
| chengqm |     21 | fish |
| yexm    |      1 | dog  |
| yexm    |     11 | cat  |
| yexm    |     21 | fish |
+---------+--------+------+
6 rows in set (0.00 sec)

결과에서 볼 수 있듯이

할 때 매우 편리합니다.

위 내용은 MySQL 자동 증가 필드 값에 대한 자세한 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제