`
shirlly
  • 浏览: 1652469 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

使用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只返回插入的第一条记录产生的值. 比如

mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');   
mysql> SELECT * FROM t;   
+----+------+   
| id | name |   
+----+------+   
|  1 | Bob  |   
|  2 | aaaa |   
|  3 | bbbb |   
|  4 | cccc |   
+----+------+   
mysql> SELECT LAST_INSERT_ID();   
+------------------+   
| LAST_INSERT_ID() |   
+------------------+   
|                2 |   
+------------------+  
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 而不用担心其它客户端的活动,而且不需要加锁。


原文连接:http://wangcheng.iteye.com/blog/54293
分享到:
评论

相关推荐

    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