如何在mssql中獲取最新自增ID的值

2022-07-19 07:03:10 字數 1836 閱讀 1262

@@identity 返回最後乙個插入 identity 的值,這些操作包括:insert, select into,或者 bulk copy。如果在給沒有 identity 列的其他表插入記錄,系統將其置為 null。如果有多行記錄插入到 identity 表中,@@identity 表示最後乙個產生的值。如果觸發了某個觸發器,並且這個觸發器執行向另乙個帶有 identity 列的表的插入操作,@@identity 將返回這個由觸發器產生的值。如果這個觸發器插入的表中不包含 identity 列,那麼 @@identity 將為 null。如果插入操作失敗,@@identity 值依然會增加,所以 identity 不保證資料的連續性。

從本身用法是沒有什麼區別的。

唯一區別的@@identity是sql server ,而last_insert_id()

是my sql,identity是跟last_insert_id的區別是如果出現insert多條記錄的時候,乙個是取這個事務的最前面的哪個,乙個是取這個事務的最後乙個.

last_insert_id()是取資料最後一下。而@@identity是順序取資料的

看到了吧!last_insert_id()函式的返回值不是基於整個資料庫的插入語句,

而是基於單個連線客戶端之間所執行的insert語句最近一條,而且客戶端之間是不會影響的,它是連線級別的函式,只對當前使用者的連線有效。

以下文章**於網路(文筆比我好,哈哈)

在mysql中,使用auto_increment型別的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 得到的結果和連線2中執行select last_insert_id()的結果是不同的;而在兩個連線中執行select max(id)的結果是相同的。last_insert_id()

其實在mssql中scope_identity()和ident_current()的區別和這裡是類似的。使用scope_identity()可以獲得插入某個identity欄位的當前會話的值,而使用ident_current()會獲得在某個identity欄位上插入的最大值,而不區分不同 的會話。

注:使用select last_insert_id()時要注意,當一次插入多條記錄時,只是獲得第一次插入的id值,務必注意!

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 而不用擔心其它客戶端的活動,而且不需要加鎖。

如何在SQLite中建立自增字段?

簡單的回答 乙個宣告為 integer primary key 的字段將自動增加。這裡是詳細的答案 從 sqlite 的 2.3.4 版本開始,如果你將乙個表中的乙個字段宣告為 integer primary key,那麼無論你何時向該錶的該字段插入乙個 null 值,這個 null 值將自動被更換...

如何在Oracle裡實現自增

在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。1 create sequence 你首先要有create sequence或者create any sequence許可權,create sequence emp sequence incr...

表資料中自增id如何獲取

1.自增表獲取自增id的方式大概有三種,scope identity ident current 和 identity,使用方式以及效果見下。2.效果展示 1 準備基礎資料 if object id n tb1 n u is not null drop table tb1 goif object i...