mysql自增字段,自增字段計數器在主存儲里面,不在硬盤上(this counter is stored only in main memory, not on disk)。
1,添加表,設立自增主鍵字段
create?table?t(id?int?primary?key?auto_increment,?name?varchar(3000))?engine=innodb;
2,可以讓系統自增,也可以自己手動設置輸入自增。
insert?into?t?select?4,?'a44'; insert?into?t(name)?select?'a8';
3,查詢當前表的自增值
SELECT?MAX(id)?FROM?t?FOR?UPDATE;
4,如果你設置的自增值超過當前最大自增值,則以你設置的自增值為準,開始自增。例如:
SELECT MAX(id) FROM t FOR UPDATE;得出值為4,然后你insert into t select 9, ‘a44’;那么這個時候,MAX(id)就是9,
那么下一個自增值就是16而不是5,當然了,你執行語句insert into t select 5, ‘a44’;也是可以通過的。
5,如果有事務的話,insert之后了rollback,autocommit里面的counter不會回滾,依然+1.
6,參數
innodb_autoinc_lock_made
在my.cnf里面直接添加一行
[mysqld] innodb_autoinc_lock_mode?=?0
然后重啟mysql數據庫,執行show variables like ‘%innodb_autoinc_lock_mode%’; 發現值為0,修改成功。
7,一個只有自增字段的表的錄入方法
CREATE?TABLE?`t1`?( ??`id`?int(11)?NOT?NULL?AUTO_INCREMENT, ??PRIMARY?KEY?(`id`) )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;
7.1 自己設值insert進去
insert?into?t1?select?1; mysql>?select?*?from?t1; +----+ |?id?| +----+ |??1?| +----+ 1?row?in?set?(0.00?sec)
7.2 調用mysql的函數 LAST_INSERT_ID();
mysql>?SELECT?LAST_INSERT_ID(); +------------------+ |?LAST_INSERT_ID()?| +------------------+ |????????????????0?| +------------------+ 1?row?in?set?(0.01?sec)
ps:這里是0,是因為上一次insert是錄入的值,沒有調用此函數,所以從0時初始值,但是不影響正常的insert到表的值。
mysql>?insert?into?t1?select?LAST_INSERT_ID(); Query?OK,?1?row?affected?(0.00?sec) Records:?1??Duplicates:?0??Warnings:?0 mysql>?select?*?from?t1; +----+ |?id?| +----+ |??1?| |??2?| +----+ 2?rows?in?set?(0.00?sec) mysql>
?以上就是自增字段 auto_commit的研究分析的內容,更多相關內容請關注PHP中文網(www.php.cn)!?
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END