`
wangcheng
  • 浏览: 1463433 次
  • 性别: Icon_minigender_1
  • 来自: 青岛人在北京
社区版块
存档分类
最新评论

使用MySQL的LAST_INSERT_ID

阅读更多

LAST_INSERT_ID

自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 

The ID that was generated is maintained in the server on a per-connection basis.

LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。

 可以用 SELECT LAST_INSERT_ID(); 查询LAST_INSERT_ID的值.

Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only.

使用单INSERT语句插入多条记录,  LAST_INSERT_ID只返回插入的第一条记录产生的值. 比如

  1. mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');   
  2. mysql> SELECT * FROM t;   
  3. +----+------+   
  4. | id | name |   
  5. +----+------+   
  6. |  1 | Bob  |   
  7. |  2 | aaaa |   
  8. |  3 | bbbb |   
  9. |  4 | cccc |   
  10. +----+------+   
  11. mysql> SELECT LAST_INSERT_ID();   
  12. +------------------+   
  13. | LAST_INSERT_ID() |   
  14. +------------------+   
  15. |                2 |   
  16. +------------------+  

ID 2 是在插入第一条记录aaaa 时产生的.

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。

但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。

这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。

分享到:
评论
7 楼 yhxf_ie 2017-12-08  
azheng270 写道
   永远是0

知道答案了, insert语句和SELECT LAST_INSERT_ID(); 一起执行就可以了
6 楼 yhxf_ie 2017-12-08  
insert了还是0... 可能还要设置些什么?
5 楼 丿蓝轩 2014-02-25  
为什么select出来的记录不是一条?
4 楼 javaAlpha 2011-03-01  
需要你先执行insert,然后再执行select就不会出现0了。
如果你不执行insert,直接执行select就会出现0的。
3 楼 azheng270 2011-01-24  
   永远是0
2 楼 JessicaCao 2009-02-18  
为什么我SELECT LAST_INSERT_ID();后显示的值是0呢?
1 楼 浪客剑心 2008-11-16  
好贴,正愁找不到呢!!!

相关推荐

    Mysql中LAST_INSERT_ID()的函数使用详解

    在MySQL数据库中,LAST_INSERT_ID()函数是一个非常实用的工具,尤其在处理多表关联或者需要获取最新插入记录的自增ID时。该函数的主要作用是返回最近一次执行的INSERT或UPDATE语句对具有AUTO_INCREMENT属性的列所...

    轻松掌握MySQL函数中的last_insert_id()

    在MySQL中,`last_insert_id()` 是一个非常有用的函数,它允许我们获取最后一条INSERT操作自动生成的ID值。这个函数通常与具有自动增长特性的主键字段一起使用,例如INT类型的`id`字段,当插入新记录时,MySQL会自动...

    MYSQL 小技巧 -- LAST_INSERT_ID

    总而言之,理解和正确使用LAST_INSERT_ID() 和 mysql_insert_id() 对于进行高效且安全的数据库操作至关重要。开发者应当根据具体情况选择合适的函数,并注意可能由于使用不当而引发的数据不一致问题。在并发环境下,...

    MYSQL 小技巧 — LAST_INSERT_ID

    总之,了解并正确使用`LAST_INSERT_ID()`函数是确保MySQL数据操作准确性和效率的关键。在处理自增ID时,务必注意数据类型、`AUTO_INCREMENT`属性以及是否使用了`INSERT DELAYED`,同时避免使用`SELECT MAX(id)`来...

    解决Hibernate JPA中insert插入数据后自动执行select last_insert_id()

    在使用Hibernate JPA进行数据操作时,我们可能会遇到一个特定的情况,即在执行完插入(insert)操作后,系统会自动执行一个`select last_insert_id()`的查询来获取刚刚生成的自增主键值。这个问题在Spring MVC集成...

    使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值

    为了解决这个问题,我们可以利用MySQL的`LAST_INSERT_ID()`函数来生成并追踪各分表的唯一ID。 首先,我们需要创建一个单独的表,例如`ticket_mutex`,用于存储不同业务的ID值。这个表包含两个字段:`name`用于标识...

    PHP获取MySql新增记录ID值的3种方法

    当遇到`bigint`类型的ID时,可以使用MySQL的内置函数`LAST_INSERT_ID()`来解决`mysql_insert_id()`的问题,如下所示: ```php $result = mysql_query("SELECT LAST_INSERT_ID()", $link); ``` `LAST_INSERT_ID...

    mysql中实现sequence.pdf

    在某些数据库系统中,可以通过内置的函数来实现这一点,而在MySQL中,我们可以使用`LAST_INSERT_ID()`函数来达到目的。`LAST_INSERT_ID()`函数返回的是最后通过`INSERT`语句产生的`AUTO_INCREMENT`值。为了确保正确...

    mysql的插入问题 怎么获得自动增长的ID

    - 如果你的应用环境中允许使用`LAST_INSERT_ID()`函数,可以通过执行如下SQL语句来获取最后插入记录的ID。 ```java Statement stmt = connection.createStatement(); stmt.executeUpdate("INSERT INTO test_...

    PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID

    下面是一个简单的示例,演示了如何使用`mysql_insert_id()`获取新插入记录的ID: ```php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $db_...

    Vocabulary_python_mySQL.rar_MYSQL_python mysql_python MySQL_p

    query = ("INSERT INTO employees (first_name, last_name) VALUES (%s, %s)") cursor.executemany(query, data) ``` 对于文件`www.pudn.com.txt`和`cihui_python_mySQL`,它们可能是包含SQL语句或数据库相关示例的...

    解析sql中得到刚刚插入的数据的id

    在MySQL中,这个功能可以通过`LAST_INSERT_ID()`函数实现。`LAST_INSERT_ID()`是一个非常实用的特性,它与特定的`Connection`对象相关联,而不是与具体的表相关,这意味着它会记录最近一次在当前连接中执行的`INSERT...

    利用mysql事务特性实现并发安全的自增ID示例

    创建一个只含有自增ID字段的表,如`test`,使用MyISAM引擎(因为它对`LAST_INSERT_ID()`支持更好)。通过`UPDATE`语句将ID设置为其自身的值加1,然后使用`SELECT LAST_INSERT_ID();`获取新生成的ID。`LAST_INSERT_...

    Mysql(序列/ID)生成方案

    一种可能的解决方案是使用`LAST_INSERT_ID()`函数配合`SELECT...FOR UPDATE`语句。当多个并发线程尝试获取新的ID时,每个线程都会锁定表中的特定行,然后通过`LAST_INSERT_ID()`获取当前的ID并增加它。这样可以确保...

Global site tag (gtag.js) - Google Analytics