1. 程式人生 > >分表保持id自增方式

分表保持id自增方式

1、replace into 如果發現表中已經有此行資料(根據主鍵或者唯一索引判斷)則先刪除此行資料,然後插入新的資料。否則,直接插入新資料。
用法:

insert into t(... , ...) values(... , ...)

修改為

replace into t(... , ...) values(... , ...)

2、清空表truncate table

truncate table你的表名 //這樣不但將資料全部刪除,而且重新定位自增的欄位

 truncate命令是會把自增的欄位還原為從1開始的,或者你試試把table_a清空,然後取消自增,儲存,再加回自增,這也是自增段還原為

的方法。

3、LAST_INSERT_ID

一是不帶引數:LAST_INSERT_ID(),這種方法和AUTO_INCREMENT屬性一起使用,當往帶有‘AUTO_INCREMENT’屬性欄位的表中新增記錄時,LAST_INSERT_ID()即返回該欄位的值,大家可試下(我已經驗證過);

二是帶有表示式:如上面介紹的LAST_INSERT_ID(value+1),它返回的是表示式的值,即‘value+1’;


使用方式:

UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name='USER';

SELECT LAST_INSERT_ID();

UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name='POST';

SELECT 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。LAST_INSERT_ID是基於單個connection的, 不可能被其它的客戶端連線改變。