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 而不用担心其它客户端的活动,而且不需要加锁。
分享到:
相关推荐
在MySQL数据库中,LAST_INSERT_ID()函数是一个非常实用的工具,尤其在处理多表关联或者需要获取最新插入记录的自增ID时。该函数的主要作用是返回最近一次执行的INSERT或UPDATE语句对具有AUTO_INCREMENT属性的列所...
在MySQL中,`last_insert_id()` 是一个非常有用的函数,它允许我们获取最后一条INSERT操作自动生成的ID值。这个函数通常与具有自动增长特性的主键字段一起使用,例如INT类型的`id`字段,当插入新记录时,MySQL会自动...
总而言之,理解和正确使用LAST_INSERT_ID() 和 mysql_insert_id() 对于进行高效且安全的数据库操作至关重要。开发者应当根据具体情况选择合适的函数,并注意可能由于使用不当而引发的数据不一致问题。在并发环境下,...
总之,了解并正确使用`LAST_INSERT_ID()`函数是确保MySQL数据操作准确性和效率的关键。在处理自增ID时,务必注意数据类型、`AUTO_INCREMENT`属性以及是否使用了`INSERT DELAYED`,同时避免使用`SELECT MAX(id)`来...
在使用Hibernate JPA进行数据操作时,我们可能会遇到一个特定的情况,即在执行完插入(insert)操作后,系统会自动执行一个`select last_insert_id()`的查询来获取刚刚生成的自增主键值。这个问题在Spring MVC集成...
为了解决这个问题,我们可以利用MySQL的`LAST_INSERT_ID()`函数来生成并追踪各分表的唯一ID。 首先,我们需要创建一个单独的表,例如`ticket_mutex`,用于存储不同业务的ID值。这个表包含两个字段:`name`用于标识...
当遇到`bigint`类型的ID时,可以使用MySQL的内置函数`LAST_INSERT_ID()`来解决`mysql_insert_id()`的问题,如下所示: ```php $result = mysql_query("SELECT LAST_INSERT_ID()", $link); ``` `LAST_INSERT_ID...
在某些数据库系统中,可以通过内置的函数来实现这一点,而在MySQL中,我们可以使用`LAST_INSERT_ID()`函数来达到目的。`LAST_INSERT_ID()`函数返回的是最后通过`INSERT`语句产生的`AUTO_INCREMENT`值。为了确保正确...
- 如果你的应用环境中允许使用`LAST_INSERT_ID()`函数,可以通过执行如下SQL语句来获取最后插入记录的ID。 ```java Statement stmt = connection.createStatement(); stmt.executeUpdate("INSERT INTO test_...
下面是一个简单的示例,演示了如何使用`mysql_insert_id()`获取新插入记录的ID: ```php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $db_...
query = ("INSERT INTO employees (first_name, last_name) VALUES (%s, %s)") cursor.executemany(query, data) ``` 对于文件`www.pudn.com.txt`和`cihui_python_mySQL`,它们可能是包含SQL语句或数据库相关示例的...
在MySQL中,这个功能可以通过`LAST_INSERT_ID()`函数实现。`LAST_INSERT_ID()`是一个非常实用的特性,它与特定的`Connection`对象相关联,而不是与具体的表相关,这意味着它会记录最近一次在当前连接中执行的`INSERT...
创建一个只含有自增ID字段的表,如`test`,使用MyISAM引擎(因为它对`LAST_INSERT_ID()`支持更好)。通过`UPDATE`语句将ID设置为其自身的值加1,然后使用`SELECT LAST_INSERT_ID();`获取新生成的ID。`LAST_INSERT_...
一种可能的解决方案是使用`LAST_INSERT_ID()`函数配合`SELECT...FOR UPDATE`语句。当多个并发线程尝试获取新的ID时,每个线程都会锁定表中的特定行,然后通过`LAST_INSERT_ID()`获取当前的ID并增加它。这样可以确保...