자동 증가 필드 auto_commit 연구 및 분석

黄舟
풀어 주다: 2017-02-17 11:44:23
원래의
1284명이 탐색했습니다.


MySQL 자동 증가 필드인 자동 증가 필드 카운터는 하드 디스크가 아닌 메인 스토리지에 있습니다(이 카운터는 디스크가 아닌 메인 메모리에만 저장됩니다).
1. 테이블을 추가하고 자동 증가 기본 키 필드를 설정합니다.

create table t(id int primary key auto_increment, name varchar(3000)) engine=innodb;
로그인 후 복사

2. 입력 자동 증가를 수동으로 설정할 수 있습니다.

insert into t select 4, 'a44';
insert into t(name) select 'a8';
로그인 후 복사

3, 현재 테이블의 자동 증가 값 쿼리

SELECT MAX(id) FROM t FOR UPDATE;
로그인 후 복사

4, 자동- 설정한 증분 값이 현재 값을 초과합니다. 최대 자체 증분 값은 설정한 자체 증분 값을 기준으로 하며 자동으로 증가하기 시작합니다. 예를 들면 다음과 같습니다.
SELECT MAX(id) FROM t FOR UPDATE; 결과 값은 4이고 t select 9에 'a44'를 삽입합니다. 그러면 이때 MAX(id)는 9입니다.
그러면 다음 자동 증가 값은 5가 아닌 16이 됩니다. 물론 t select 5, 'a44';에 insert 문을 실행하면 통과됩니다.


5 트랜잭션이 있으면 insert 후 롤백을 수행하고, autocommit의 카운터는 롤백되지 않으며 여전히 +1입니다.


6, 매개변수

innodb_autoinc_lock_made
로그인 후 복사

my.cnf에 직접 줄 추가

[mysqld]
innodb_autoinc_lock_mode = 0
로그인 후 복사

그런 다음 mysql 데이터베이스를 다시 시작하고 '%innodb_autoinc_lock_mode%'와 같은 표시 변수를 실행합니다. 값이 0인 것을 확인하면 수정이 성공합니다.


7. 자동 증가 필드만 있는 테이블을 입력하는 방법

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
로그인 후 복사


7.1 원하는 값 삽입

insert into t1 select 1;
mysql> select * from t1;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)
로그인 후 복사


7.2 mysql 함수 호출 LAST_INSERT_ID();

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                0 |
+------------------+
1 row in set (0.01 sec)
로그인 후 복사

ps: 여기 0, 마지막 삽입이 입력된 값이고 이 함수가 호출되지 않았기 때문에 초기값은 0부터이지만 테이블에 대한 일반적인 삽입 값에는 영향을 미치지 않습니다.


mysql> insert into t1 select LAST_INSERT_ID();
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
mysql> select * from t1;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)
mysql>
로그인 후 복사

위 내용은 자체 추가된 auto_commit 필드에 대한 조사 및 분석 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 참고해주세요. (www.php.cn)!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿