>  기사  >  데이터 베이스  >  MySQL 함수에서 last_insert_id()를 쉽게 마스터하세요.

MySQL 함수에서 last_insert_id()를 쉽게 마스터하세요.

黄舟
黄舟원래의
2017-01-18 11:17:191486검색

Mysql 관계형 데이터베이스 관리 시스템

MySQL은 스웨덴 MySQL AB 회사에서 개발한 오픈 소스 소규모 관계형 데이터베이스 관리 시스템입니다. MySQL은 인터넷상의 중소규모 웹사이트에서 널리 사용되고 있습니다. 작은 크기, 빠른 속도, 낮은 총 소유 비용, 특히 오픈 소스의 특성으로 인해 많은 중소 웹 사이트에서는 웹 사이트 총 소유 비용을 줄이기 위해 MySQL을 웹 사이트 데이터베이스로 선택합니다.


이 글에서 소개하는 Mysql 함수 Last_insert_id()는 그 중 하나가 될 것입니다. 예를 들어 설명하자면, 도움이 필요한 친구들이 와서 살펴보는 것이 모두의 이해와 학습에 더 도움이 될 것입니다.

서문

최근 동료가 last_insert_id()에서 얻은 결과가 예상과 다른 이유를 물어봐서 이 매개변수를 진지하게 연구했습니다. last_insert_id에 대한 자세한 소개는 다음과 같습니다. (), 함께 배워봅시다.

먼저 예를 들어보세요

wing@3306>show create table tt;
+-------+-----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                           |
+-------+-----------------------------------------------------------------------------------------------------------------------+
| tt | CREATE TABLE `tt` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
# 没有指定值的时候,last_insert_id()符合预期希望
wing@3306>insert into tt values();
Query OK, 1 row affected (0.00 sec)
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    1 |
+------------------+
1 row in set (0.00 sec)
wing@3306>insert into tt values();
Query OK, 1 row affected (0.00 sec)
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    2 |
+------------------+
1 row in set (0.00 sec)
# what?不是应该是5么,为什么是第一个插入的值3?last_insert_id开始有一点不符合预期了。。
wing@3306>insert into tt values(),(),();
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    3 |
+------------------+
1 row in set (0.00 sec)
wing@3306>insert into tt values(),(),();
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    6 |
+------------------+
1 row in set (0.00 sec)
# 纳尼?按照预期不是10么?为什么还是之前的6?last_insert_id()我不懂你啊。。
wing@3306>insert into tt values(10);
Query OK, 1 row affected (0.01 sec)
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    6 |
+------------------+
1 row in set (0.00 sec)

두 번째로 공부하세요

MySQL 공식 문서를 확인하세요. 정말 중요합니다. . .

공식 출처: http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id

원본 문서 단어 :

With no argument, LAST_INSERT_ID() returns a 64-bit value representing the first automatically generated value successfully 
inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement.

번역: 매개변수가 없는

last_insert_id()는 자동 증가 열에서 실행된 가장 최근 INSERT 문의 첫 번째 자동 생성 값을 반환합니다.

공식 문서의 원래 단어:

If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the 
first inserted row only. The reason for this is to make it possible to reproduce easily the same INSERT statement against some other server.

번역:

하나의 INSERT 문에 여러 값을 삽입하면, last_insert_id()는 INSERT 문에서 자동으로 생성된 첫 번째 값을 반환합니다.

그럼 분석해 보세요

위 번역의 검은색 글씨를 잘 읽어보시고 last_insert_id()의 제약사항을 염두에 두시기 바랍니다.

지정된 값을 삽입할 때 last_insert_id()가 실패하는 이유는 무엇입니까?

공식 문서에는 사용자가 지정한 값이 아니라 자동으로 생성된 값이라고 명시되어 있습니다. 이는 자동 증가 카운터 자체에 의해 생성되며 last_insert_id()로 추적할 수 있습니다. .

여러 값을 삽입할 때 첫 번째 삽입된 값이 표시되는 이유는 무엇입니까? 마지막 값은 마지막 값을 의미하지 않나요? .

공식 문서에는 최신 INSERT 문**에 의해 자동으로 생성된 첫 번째 값이라고 명시되어 있습니다. .

요약

last_insert_id()의 제약 조건을 기억하세요. 가장 최근의 INSERT 문에 의해 autpincrement 열에 자동으로 생성된 첫 번째 값입니다. 요약된 문장이 번역된 문장보다 훨씬 부드러운 느낌입니다==

그렇습니다. 위의 내용은 이 글의 전체 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. !


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.