自增字段 auto_commit的研究分析

黄舟
發布: 2017-02-17 11:44:23
原創
1279 人瀏覽過


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;
登入後複製

7.1 自己設值insert進去


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)! 

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板