真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

簡單掌握什么是MySQL自增字段取值

本文主要給大家介紹MySQL自增字段取值,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下MySQL自增字段取值吧。                                                   

桐梓網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),桐梓網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為桐梓超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的桐梓做網(wǎng)站的公司定做!

1 前言

本文來自回答思否網(wǎng)友的一個問題,這個網(wǎng)友新建了一張表,auto_increment_increment設(shè)為10,AUTO_INCREMENT主鍵起始值設(shè)為9, 當(dāng)他插入數(shù)據(jù)的時候,發(fā)現(xiàn)主鍵值是從11開始的,所以產(chǎn)生了疑惑。這篇文章一起來討論一下自增字段問題。

2 自增字段計算方式

自增字段取值和auto_increment_increment參數(shù)和auto_increment_offset參數(shù)有關(guān),auto_increment_offset參數(shù)設(shè)置的是自增字段偏移值,也就是計算起始值,auto_increment_increment參數(shù)設(shè)置的是自增字段的步長,也就是每次增加多少。auto_increment_increment和auto_increment_offset經(jīng)常用在主主復(fù)制中防止主鍵重復(fù)。auto_increment_increment為Integer類型,取值1-65535,如果設(shè)置為0,會改為1,如果設(shè)置超過取值范圍,會改為65535。

自增字段的取值是通過auto_increment_offset + N × auto_increment_increment這個公式計算出來的,而N是一個類似于[1,2,3,...]這樣的遞增序列。當(dāng)插入一條數(shù)據(jù)時,數(shù)據(jù)庫會從auto_increment_offset + N × auto_increment_increment計算出來的遞增數(shù)列中取大于等于當(dāng)前AUTO_INCREMENT的最小一個元素作為該字段下一個自增的值。

auto_increment_increment可以動態(tài)改變,但是計算自增字段取值的時候,不會受已經(jīng)存在的數(shù)據(jù)影響,計算方式不變。

下面讓我們做一些測試

db83-3306>>SET @@auto_increment_increment=10;
Query OK, 0 rows affected (0.00 sec)

db83-3306>>SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 10    |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set (0.00 sec)

db83-3306>>CREATE TABLE autoinc1(
    ->     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> ) engine=InnoDB;
Query OK, 0 rows affected (0.01 sec)

db83-3306>>INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

db83-3306>>select * from autoinc1;
+----+
| id |
+----+
|  1 |
| 11 |
| 21 |
| 31 |
+----+
4 rows in set (0.00 sec)

我們先創(chuàng)建了一個包含自增字段的表,把步長設(shè)為10, 插入數(shù)據(jù)發(fā)現(xiàn)增長確實是公式中計算的值。下面我們再測試一下建表時設(shè)置AUTO_INCREMENT是否會有影響

db83-3306>>CREATE TABLE autoinc2(
    ->     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> ) engine=InnoDB AUTO_INCREMENT=8;
Query OK, 0 rows affected (0.01 sec)

db83-3306>>INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

db83-3306>>select * from autoinc2;
+----+
| id |
+----+
| 11 |
| 21 |
| 31 |
| 41 |
+----+
4 rows in set (0.00 sec)

可以看到即使設(shè)置了AUTO_INCREMENT的值,也不影響自增字段的計算

3 其他情況

上面那是正常情況下的取值,下面我們探討一種特殊情況

3.1 根據(jù)分組自增長

有一種特殊情況會造成自增長字段可能不會自增長, 就是當(dāng)使用 MyISAM引擎,且使用了聯(lián)合索引,自增字段為非聯(lián)合索引首個字段。

這種情況下,自增字段取值為MAX(auto_increment_column) + auto_increment_offset WHERE prefix=given-prefix, 怎么理解,就是計算增長值的時候,對聯(lián)合索引自增長字段前面字段做一個分組,在該分組內(nèi)做一個獨(dú)立的增長計算。

例如對a,b,c做了聯(lián)合索引,c是自增字段,那么對where a=xx and b=xx這個條件下的數(shù)據(jù)做獨(dú)立的增長計算。下面是實例:

db83-3306>>CREATE TABLE user_pets (
    ->     name varchar(16) NOT NULL,
    ->     id_inc INT NOT NULL AUTO_INCREMENT,
    ->     pets varchar(16) NOT NULL,
    ->     PRIMARY KEY (name, id_inc)
    -> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)

db83-3306>>INSERT INTO user_pets(name, pets) VALUES
    -> ('chengqm', 'dog'),
    -> ('chengqm', 'cat'),
    -> ('chengqm', 'fish'),
    -> ('yexm', 'dog'),
    -> ('yexm', 'cat'),
    -> ('yexm', 'fish');
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

db83-3306>>SELECT * FROM user_pets;
+---------+--------+------+
| name    | id_inc | pets |
+---------+--------+------+
| chengqm |      1 | dog  |
| chengqm |     11 | cat  |
| chengqm |     21 | fish |
| yexm    |      1 | dog  |
| yexm    |     11 | cat  |
| yexm    |     21 | fish |
+---------+--------+------+
6 rows in set (0.00 sec)

從結(jié)果可以看出,在name字段相同的字段內(nèi),會有獨(dú)立的自增長計算,這種計算方式在做group by的時候非常方便。

看完以上關(guān)于什么是MySQL自增字段取值,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業(yè)知識信息 ,可以持續(xù)關(guān)注我們的行業(yè)資訊欄目的。


分享題目:簡單掌握什么是MySQL自增字段取值
當(dāng)前網(wǎng)址:http://weahome.cn/article/gsphih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部