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
[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;
insert into t1 select 1;
mysql> select * from t1;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
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)!