MYSQL中取得最後一條記錄

2021-09-09 00:03:02 字數 824 閱讀 6456

在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值,務必注意!可以試試

從mysql中查最後一條記錄

select from table order by id desc limit 1 mysql select from 表名 or der by 表 id desc limit 1 sqlserver oracle select top 1 from 表名 order by 表 id desc 首...

MySQL查月底最後一條記錄

人工智慧,零基礎入門!第一種方法 選定時間範圍,然後倒序排序,通過limit關鍵字只查第1行就是最後一條記錄 select from order where order time 2019 10 01 and order time 2019 11 01 order by order time des...

MySQL獲得每天最後一條記錄

表 test entity 中資料 情況一 如果時間列 create date 是 datetime 格式 2020 08 24 15 57 57 select a.id,a.test name,a.create date,b.date from test entity a join select ...