MySQL中如何擷取下一條插入的自增ID 或 剛剛插入的id
要立刻獲得剛插入記錄的id,該表必須有一個為一個AUTO_INCREMENT列產生的ID
- $sql_addinfo = " insert into contact_info_group set contact_group_id='',contact_id='' " ;
- mysql_query ( $sql_addinfo ) ;
- echo mysql_insert_id () ;
mysql_insert_id – 取得上一步 INSERT 操作產生的 ID
int mysql_insert_id ( [resource link_identifier])
mysql_insert_id() 返回給定的 link_identifier 中上一步 INSERT 查詢中產生的 AUTO_INCREMENT 的 識別碼。如果沒有指定 link_identifier,則使用上一個開啟的串連。
如果上一查詢沒有產生 AUTO_INCREMENT 的值,則 mysql_insert_id() 返回 0。如果需要儲存該值以後使用,要確保在產生了值的查詢之後立即調用 mysql_insert_id()。
注: MySQL 中的 SQL 函數 LAST_INSERT_ID() 總是儲存著最新產生的 AUTO_INCREMENT 值,並且不會在查詢語句之間被重設。
警告
mysql_insert_id() 將 MySQL 內部的 C API 函數 mysql_insert_id() 的傳回值轉換成 long(PHP 中命名為 int)。如果 AUTO_INCREMENT 的列的類型是 BIGINT,則 mysql_insert_id() 返回的值將不正確。可以在 SQL 查詢中用 MySQL 內部的 SQL 函數 LAST_INSERT_ID() 來替代。
具體使用如下語句:mysql_query(”SELECT LAST_INSERT_ID()”);
PS: 在插入資料時候可以這樣寫insert into xxx (col_a, col_b) values (11,22);select LAST_INSERT_ID()這樣不就可以取到最近產生的ID了嗎.
常常需要在編程的時候擷取當前表的下一個自增的ID值,因為表可能被刪除之後造成最大的Max(ID) + 1並不是下一條ID的值,所以需要使用其他辦法。通過查詢Mysql的文檔,會發現Mysql裡面有一個函數叫做getLastInsertID,用來擷取最後插入的表的ID值,但是對擷取下一條插入的自增ID並沒有太多協助。
1. 方法1
插入一條測試記錄,然後刪除掉,擷取ID。不再贅述。
2. 方法2
利用Mysql內建的一個函數語句 "SHOW TABLE STATUS" ,可以擷取當前資料庫裡的所有表的屬性等資訊,通常用來做資料庫的最佳化和維護。如果需要指定某一張表的話,可以通過兩種方法指定。
一種是網上給出來的:
show table status like '
TableName '
另外就是常見的where語句
show table status where Name ='
TableName '
得到的結果集裡面有一列AUTO_INCREMENT,是一個Int值變數,擷取之後就是下一個要插入的ID了。
我這裡用的: 這裡為insert的動作陳述式
//-------------------cms mysql_insert_id()-----------------------------
$result=$db->query("SELECT LAST_INSERT_ID() as id");
$data=$db->fetchNextObject($result);
$newid =$data->id;
//-------------------cms mysql_insert_id()-----------------------------