LAST_INSERT_ID() LAST_INSERT_ID(expr)
2011-11-30 11:26
260 查看
LAST_INSERT_ID()LAST_INSERT_ID(expr)
自动返回最后一个INSERT或UPDATE问询为AUTO_INCREMENT列设置的第一个发生的值。
mysql>SELECTLAST_INSERT_ID();
->195
产生的ID每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们自己的AUTO_INCREMENT值。这个行为保证了你能够找回自己的ID而不用担心其它客户端的活动,而且不需要加锁或处理。
假如你使用一个非“magic”值来更新某一行的AUTO_INCREMENT列,则LAST_INSERT_ID()的值不会变化(换言之,一个不是NULL也不是0的值)。
重点:假如你使用单INSERT语句插入多个行,LAST_INSERT_ID()只返回插入的第一行产生的值。其原因是这使依靠其它服务器复制同样的INSERT语句变得简单。
例如:
虽然第二个问询将3个新行插入t,对这些行的第一行产生的ID为2,这也是LAST_INSERT_ID()返回的值。
假如你使用INSERTIGNORE而记录被忽略,则AUTO_INCREMENT计数器不会增量,而LAST_INSERT_ID()返回0,这反映出没有插入任何记录。
若给出作为到LAST_INSERT_ID()的参数expr,则参数的值被函数返回,并作为被LAST_INSERT_ID()返回的下一个值而被记忆。这可用于模拟序列:
创建一个表,用来控制顺序计数器并使其初始化:
omysql>CREATETABLEsequence(idINTNOTNULL);
omysql>INSERTINTOsequenceVALUES(0);
使用该表产生这样的序列数:
omysql>UPDATEsequenceSETid=LAST_INSERT_ID(id+1);
omysql>SELECTLAST_INSERT_ID();
UPDATE语句会增加顺序计数器并引发向LAST_INSERT_ID()的下一次调用,用来返回升级后的值。SELECT语句会检索这个值。mysql_insert_id()CAPI函数也可用于获取这个值。见25.2.3.36节,“mysql_insert_id()”.
你可以不用调用LAST_INSERT_ID()而产生序列,但这样使用这个函数的效用在于ID值被保存在服务器中,作为自动产生的值。它适用于多个用户,原因是多个用户均可使用UPDATE语句并用SELECT语句(或mysql_insert_id()),得到他们自己的序列值,而不会影响其它产生他们自己的序列值的客户端或被其它产生他们自己的序列值的客户端所影响。
注意,mysql_insert_id()仅会在INSERT和UPDATE语句后面被升级,因此你不能在执行了其它诸如SELECT或SET这样的SQL语句后使用CAPI函数来找回LAST_INSERT_ID(expr)对应的值。
自动返回最后一个INSERT或UPDATE问询为AUTO_INCREMENT列设置的第一个发生的值。
mysql>SELECTLAST_INSERT_ID();
->195
产生的ID每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们自己的AUTO_INCREMENT值。这个行为保证了你能够找回自己的ID而不用担心其它客户端的活动,而且不需要加锁或处理。
假如你使用一个非“magic”值来更新某一行的AUTO_INCREMENT列,则LAST_INSERT_ID()的值不会变化(换言之,一个不是NULL也不是0的值)。
重点:假如你使用单INSERT语句插入多个行,LAST_INSERT_ID()只返回插入的第一行产生的值。其原因是这使依靠其它服务器复制同样的INSERT语句变得简单。
例如:
mysql>USEtest;
Databasechanged
mysql>CREATETABLEt(
->idINTAUTO_INCREMENTNOTNULLPRIMARYKEY,
->nameVARCHAR(10)NOTNULL
->);
QueryOK,0rowsaffected(0.09sec)
mysql>INSERTINTOtVALUES(NULL,'Bob');
QueryOK,1rowaffected(0.01sec)
mysql>SELECT*FROMt;
+----+------+
|id|name|
+----+------+
|1|Bob|
+----+------+
1rowinset(0.01sec)
mysql>SELECTLAST_INSERT_ID();
+------------------+
|LAST_INSERT_ID()|
+------------------+
|1|
+------------------+
1rowinset(0.00sec)
mysql>INSERTINTOtVALUES
->(NULL,'Mary'),(NULL,'Jane'),(NULL,'Lisa');
QueryOK,3rowsaffected(0.00sec)
Records:3Duplicates:0Warnings:0
mysql>SELECT*FROMt;
+----+------+
|id|name|
+----+------+
|1|Bob|
|2|Mary|
|3|Jane|
|4|Lisa|
+----+------+
4rowsinset(0.01sec)
mysql>SELECTLAST_INSERT_ID();
+------------------+
|LAST_INSERT_ID()|
+------------------+
|2|
+------------------+
1rowinset(0.00sec)
虽然第二个问询将3个新行插入t,对这些行的第一行产生的ID为2,这也是LAST_INSERT_ID()返回的值。
假如你使用INSERTIGNORE而记录被忽略,则AUTO_INCREMENT计数器不会增量,而LAST_INSERT_ID()返回0,这反映出没有插入任何记录。
若给出作为到LAST_INSERT_ID()的参数expr,则参数的值被函数返回,并作为被LAST_INSERT_ID()返回的下一个值而被记忆。这可用于模拟序列:
创建一个表,用来控制顺序计数器并使其初始化:
omysql>CREATETABLEsequence(idINTNOTNULL);
omysql>INSERTINTOsequenceVALUES(0);
使用该表产生这样的序列数:
omysql>UPDATEsequenceSETid=LAST_INSERT_ID(id+1);
omysql>SELECTLAST_INSERT_ID();
UPDATE语句会增加顺序计数器并引发向LAST_INSERT_ID()的下一次调用,用来返回升级后的值。SELECT语句会检索这个值。mysql_insert_id()CAPI函数也可用于获取这个值。见
你可以不用调用LAST_INSERT_ID()而产生序列,但这样使用这个函数的效用在于ID值被保存在服务器中,作为自动产生的值。它适用于多个用户,原因是多个用户均可使用UPDATE语句并用SELECT语句(或mysql_insert_id()),得到他们自己的序列值,而不会影响其它产生他们自己的序列值的客户端或被其它产生他们自己的序列值的客户端所影响。
注意,mysql_insert_id()仅会在INSERT和UPDATE语句后面被升级,因此你不能在执行了其它诸如SELECT或SET这样的SQL语句后使用CAPI函数来找回LAST_INSERT_ID(expr)对应的值。
相关文章推荐
- LAST_INSERT_ID(), LAST_INSERT_ID(expr)
- mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey
- 使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值
- mysql中的last_insert_id()
- LAST_INSERT_ID()
- MySQL的mysql_insert_id和LAST_INSERT_ID(转)
- Mysql函数Last_insert_id()的真正含义
- 关于spring jdbcTemplate取得LAST_INSERT_ID
- Mysql多线程、多用户同时操作数据库获取当前用户操作的最新主键值(获取使用MySQL的LAST_INSERT_ID)
- Codeigniter 数据库操作事务情况下获取不到last_insert_id()
- last_insert_id使用及其问题解决方案
- asp.net调用mysql 存储过程 带 out 返回值,返回刚插入数据库中的自增的ID,LAST_INSERT_ID() 的使用
- mysql LAST_INSERT_ID 使用与注意事项
- last_insert_id()
- 阿里读写分离数据源SELECT LAST_INSERT_ID()获取不到id
- 在Spring中用select last_insert_id()时遇到问题
- MYSQL中的LAST_INSERT_ID()和MSSQL中的@@IDENTITY
- Mysql中last_insert_id()函数使用的注意事项
- Mysql函数:Last_insert_id()语法讲解
- last_insert_id()与mysql_insert_id()的区别