MYSQL中取得最后一条记录

在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成“主从表结构”,这是数据库设计中常见的用法。但是在具体生成id的时候,我们的操作顺序一般是:先在主表中插入记录,然后获得自动生成的id,以它为基础插入从表的记录。这里面有个困难,就是插入主表记录后,如何获得它对应的id。通常的做法,是通过“select max(id) from tablename”的做法,但是显然这种做法需要考虑并发的情况,需要在事务中对主表加以“X锁“,待获得max(id)的值以后,再解锁。这种做法需要的步骤比较多,有些麻烦,而且并发性也不好。有没有更简单的做法呢?答案之一是通过select LAST_INSERT_ID()这个操作。乍一看,它和select max(id)很象,但实际上它是线程安全的。也就是说它是具体于数据库连接的。下面通过实验说明:

1、在连接1中向A表插入一条记录,A表包含一个auto_increment类型的字段。

2、在连接2中向A表再插入一条记录。

3、结果:在连接1中执行select LAST_INSERT_ID()得到的结果和连接2中执行select LAST_INSERT_ID()的结果是不同的;而在两个连接中执行select max(id)的结果是相同的。
       其实在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的区别和这里是类似的。使用SCOPE_IDENTITY()可以获得插入某个IDENTITY字段的当前会话的值,而使用IDENT_CURRENT()会获得在某个IDENTITY字段上插入的最大值,而不区分不同的会话。

注:使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意!可以试试

insert into tb(c1,c2) values (c1value,c2value),(c1value1,c2value2)..。

时间: 2024-10-25 20:18:02

MYSQL中取得最后一条记录的相关文章

编码-MySQL怎么获得某1条记录在表中的位置?

问题描述 MySQL怎么获得某1条记录在表中的位置? 我有一个问题 : MySQL怎么获得某1条记录在表中的位置? 比如我有一个表格,里面有销量字段,产品编码(是唯一的)字段,我对销量字段按降序排列,请问,我怎么知道 产品编码=xxx 在表中按销量排在第几名? 解决方案 select count(*) from table where 销量 <= (select 销量 from table where 产品编码=xxx) 解决方案二: SELECT tmp.rownum, tmp.产品编码 FR

不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)

SQL在不同数据库中查询前几条记录的用法分类 1. orACLE Select * FROM TABLE1 Where ROWNUM<=N 2. INFORMIX Select FIRST N * FROM TABLE1 3. DB2 Select * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM Where ROWNUM<=N 或者Select COLUMN FROM TABLE FETCH FIRST N ROWS ONLY 4. SQL

select-asp.net 从Access中随机读取5条记录

问题描述 asp.net 从Access中随机读取5条记录 我用的是 select top 5 * from Pro where TypeId =1 order by rnd(ID) 在数据库查询的时候是随机的5条 每次查询都会变 但是在网页绑定时一直不变总是那几条记录 是什么原因? 解决方案 Asp.net获取Access随机记录ASP.NET 2.0中随机读取Access数据库记录ASP.NET 2.0中随机读取Access数据库记录

select-SQLServer中如何判断一条记录不能存在并使用其他值代替?

问题描述 SQLServer中如何判断一条记录不能存在并使用其他值代替? 现有表tableA,tableB.tableA有一列为bid,是通过该列跟tableB中的一行记录关联 . 一个存储过程中的语句如下,作用是获取A表中的一些信息,并通过bid获取与其关联的 tableB中的某一行的信息.(另外,tableB中会有一个aid的列,通过该列和tableA中的一条记录对应,一条talbeA中的记录可以对应tableB中多条记录,以最后更新的那条tableB记录为绑定) select tableA

代码-dreamweaver cs6 怎么在框架中显示数据库中的某一条记录?

问题描述 dreamweaver cs6 怎么在框架中显示数据库中的某一条记录? 我在制作网页的时候陷入了瓶颈,现在希望能在dreamweaver中实现这个功能:点开一个链接,直接显示出数据库中的某一条记录,并且在下面的"推荐项目"后随机显示出其他的条目. 如果要实现这个功能,代码应该怎么写 解决方案 通过javascript等来访问数据库,获取数据,然后再显示到html页面 http://www.jb51.net/article/42178.htm 解决方案二: Dreamweave

在POPUPWIN控件中能否显示多条记录?如何显示?

问题描述 在POPUPWIN控件中能否显示多条记录?如何显示?请各位大侠指教!急!

请教如何将数据库中的某一条记录的内容读到一个变量中?

问题描述 请教vb.net2005如何将数据库中的某一条记录的内容读到一个变量中?希望语句能有注释,谢谢!数据库为Access2003 解决方案 解决方案二:Access位置是否相对固定?如果相对固定又没有太多安全上的要求的话不用自己写代码就成.在项目中添加你那个Access文件,然后会在工程数据库中看到你添加的内容,把东西往窗体上一拖就成了,自动会在Load中添加代码.解决方案三:谢谢楼上的朋友回复,数据库的绑定.链接等等我知道,现在需要的是读某一条记录到一个变量中的方法!应该如何写语句?解决

如何将datagrid控件中更改的多条记录数据一次更新到数据源中?

问题描述 如何将datagrid控件中更改的多条记录数据一次更新到数据源中?

C#中从sqlserver数据库中随机提取一条记录并显示在不同的文本框中

问题描述 C#中从sqlserver数据库中随机提取一条记录并显示在不同的文本框中如图 解决方案 解决方案二:SQL:selecttop1姓名,学号,班级from表orderbynewid()C#对应上就好了.