`

MySQL的LAST_INSERT_ID用法

 
阅读更多

LAST_INSERT_ID() 自动返回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT列设置的第一个表发生的值。

MySQL 的LAST_INSERT_ID 的注意事项:

第一 、查询和插入所使用的Connection对象必须是同一个才可以,否则返回值是不可预料的。

mysql> SELECT LAST_INSERT_ID();

        -> 100

使用这函数向一个给定Connection对象返回的值是该Connection对象产生对影响AUTO_INCREMENT列的最新语句第一个AUTO_INCREMENT值的。这个值不能被其它Connection对象的影响,即它们产生它们自己的AUTO_INCREMENT值。

第二 、LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。

第三 、 假如你使用一条INSERT语句插入多个行,  LAST_INSERT_ID() 只返回插入的第一行数据时产生的值。其原因是这使依靠其它服务器复制同样的 INSERT语句变得简单。

mysql> INSERT INTO t VALUES

    -> (NULL, ‘Mary’), (NULL, ‘Jane’), (NULL, ‘Lisa’);

mysql> SELECT * FROM t;

| id | name |

+—-+——+

|  1 | Bob  |

|  2 | Mary |

|  3 | Jane |

|  4 | Lisa |

mysql> SELECT LAST_INSERT_ID();  //这就是我要说明的关键问题。

| LAST_INSERT_ID() |

|                2 |

虽然将3 个新行插入 t, 对这些行的第一行产生的 ID 为 2, 这也是 LAST_INSERT_ID()返回的值。

第四 、假如你使用 INSERT IGNORE而记录被忽略,则AUTO_INCREMENT 计数器不会增量,而 LAST_INSERT_ID() 返回0, 这反映出没有插入任何记录。

一般情况下获取刚插入的数据的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。LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。

分享到:
评论

相关推荐

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

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

    MYSQL 小技巧 -- LAST_INSERT_ID

    MySQL数据库管理系统中,LAST_INSERT_ID() 函数和 mysql_insert_id() 函数都可以用来获取最近一次INSERT操作生成的自增ID值。在PHP开发中,正确地使用这两个函数对于确保数据一致性及避免并发问题至关重要。本知识...

    MYSQL 小技巧 — LAST_INSERT_ID

    标题提到的"MYSQL 小技巧 — LAST_INSERT_ID"着重讨论了MySQL中获取自增ID的两种方法:`LAST_INSERT_ID()`和`mysql_insert_id()`的区别以及它们在不同情况下的适用性。 首先,`LAST_INSERT_ID()`函数是MySQL提供的...

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

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

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

    总结一下,`LAST_INSERT_ID()`是MySQL提供的一种方便的方法,用于获取最近一次插入操作自动生成的ID,尤其是在处理自动增长主键时。理解它的行为对于优化数据库操作和避免潜在的逻辑错误至关重要。在使用时,要注意...

    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`值。为了确保正确...

    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_...

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

    总结来说,`LAST_INSERT_ID()`和`@@IDENTITY`是两种用于获取新插入数据ID的方法,它们分别适用于MySQL和SQL Server。在设计和编写数据库操作的代码时,理解这些函数的工作原理以及它们在并发环境中的行为是非常重要...

    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语句或数据库相关示例的...

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

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

    java获取新insert数据自增id的实现方法

    Java获取新insert数据自增id的实现方法 Java获取新insert数据自增id的...这两种方法都可以解决获取新insert数据自增id的问题,而select LAST_INSERT_ID()方法更加简洁,使用Statement的getGeneratedKeys方法更方便。

    利用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并增加它。这样可以确保...

    mysql取得自动增长的主键值

    - **用法:** 可以直接在查询语句中使用`LAST_INSERT_ID()`来获取自增ID。 - **示例:** 假设执行了一次插入操作后,可以使用如下SQL语句获取自增ID: ```sql SELECT LAST_INSERT_ID(); ``` 4. **...

    基于MySQL的ID生成器idgo.zip

    SELECT LAST_INSERT_ID();这种方式生成ID的弊端就是每生成一个ID都需要查询一下MySQL,当ID生成过快时会对MySQL造成很大的压力. 这正是我写这个lib库的原因.idgo服务正确性和高可用保障措施1. 压力测试结果压测环境...

Global site tag (gtag.js) - Google Analytics