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()的函数。 代码如下: LAST_INSERT_ID() (with no argument) returns the first automatically generated value that was set for an AUTO_INCREMENT column by ...
最近一个同事问我,为什么last_insert_id()得到的结果与预期的不一样呢,于是我就认真的去研究的一下这个参数,下面是关于last_insert_id()的详细介绍,一起来学习学习吧。 首先,举个例子 wing@3306>show create ...
而,mysql_insert_id 返回的是 int 。如果你 的id 是 unsigned int,或者 bigint 的 。那么,可能是返回的是错误的。而要用 LAST_INSERT_ID() 代替。 还有些朋友,返回的都是 0,不知道怎么回事,其实 LAST_INSERT_...
用PHP调用mysql , 内置的LAST_INSERT_ID() 这个函数可能没有什么人用,用的最多的还是 mysql_insert_id()
今天在使用MySQL时却不知如何处理,插入记录后不知怎样获得刚刚插入的id,查过文档后发现了select last_insert_id(),在插入之后执行此查询,即可获得自增id,喜出望外。可用到自己的程序中之后却得不到想要的结果,...
分表除了表名的索引不同之外,表结构都是一样的,... 这个取ID的操作看似很复杂,所幸的是,MySQL提供了LAST_INSERT_ID机制,让我们能一步完成。 1、新建数据表ticket_mutex 代码如下: CREATE TABLE ticket_mutex ( na
)Hibernate: select last_insert_id()表中有个主键是自增列。可是在以往的项目中,没发现有这样的问题。于是在网上各种找也找不到原因。心想可能是配置问题。 最终在persistence.xml配置文件中找
一、使用语句: 复制代码 代码如下:mysql_query(“select max(id) from t1”,$link); 使用此方法得到的是 id最大...$getID=mysql_insert_id();//$getID即为最后一条记录的ID //此函数的使用条件: //1.假设字段名称
SELECT LAST_INSERT_ID();这种方式生成ID的弊端就是每生成一个ID都需要查询一下MySQL,当ID生成过快时会对MySQL造成很大的压力. 这正是我写这个lib库的原因.idgo服务正确性和高可用保障措施1. 压力测试结果压测环境...
mysql的一些知识点 LAST_INSERT_ID() 最近插入表的自动增加字段的当前值 ifnull,或者coalesce 字段为空时设置默认值
易语言mysql查询源码,mysql查询,echo,init,connect,set_table,field,select,find,insert,get_insert_id,update,delete,count,where,limit,order,setInc,setDec,close,get_Last_SQL,get_time,date_time,new,add_...
那就给MySQL数据库中的表的id一个AUTO_INCREMENT(自增)属性,每次插入一条数据时,id自动+1,然后使用mysql_insert_id()或LAST_INSERT_ID()返回这个自增后的id。 当然,这个问题已经有现成的解决方法了,使用...
public string id, phone, verify, last_id; SqlConnection my_sql_con; MySqlConnection con; MySqlCommand cmd; DataSet ds; public string sql_server_Conn = "Data Source=222.85.144.112,14444; ...
<? include ../signup/mysql.php; $time1=time();... $sql=insert into chat_user (userid,id,last_time) values (‘$userid’,’$nick’,’$last_time’); mysql_query($sql)or die(mysql_erro
INSERT INTO `API_location_country` (`id`, `name_en`, `name_zh-Hans`, `name_fr`, `a2code`, `a3code`, `numberic`, `last_modified`) VALUES (1, 'Afghanistan', '阿富汗', 'Afghanistan (l\')', 'AF', 'AFG', 4...
7. Db->add()方法中对_after_insert()回调的处理依赖last_insert_id, 对无自增id的表则无法处理 8. TagLibCx中compiler()方法对标签的处理, literal编号只有一位数字, 当模板中标签超过10个时, 导致模板无法展现. ...
MySQL 5.1参考手册.chm 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL...