分表保持id自增方式
阿新 • • 發佈:2019-02-10
1、replace into
如果發現表中已經有此行資料(根據主鍵或者唯一索引判斷)則先刪除此行資料,然後插入新的資料。否則,直接插入新資料。
用法: 1 的方法。
用法:
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的, 不可能被其它的客戶端連線改變。