MySQL中使用auto_increment修改初始值和步長
1、如何查看auto_increment的初始值和步長
打開黑窗口,登錄管理員賬號和密碼后,執(zhí)行以下命令:
show variables like 'auto_inc%'; -- 查看當前數(shù)據(jù)庫的自增長設(shè)置
執(zhí)行結(jié)果如下:
即 auto_increment的初始值(offset)是1, 步長(increment)是1. (步長指每次的遞增量)。即每次遞增1.
2、如何修改auto_increment的初始值和步長
在黑窗口中執(zhí)行以下命令:
set @@auto_increment_increment=2; --設(shè)置步長為2 set @@auto_increment_offset=2; --設(shè)置初始值為3
接下來做個測試:
--創(chuàng)建測試表test create table test( id int(10) primary key auto_increment, name varchar(50) ); -- 插入測試數(shù)據(jù) insert into test (name) values ('張三'); insert into test (name) values ('李四'); insert into test (name) values ('王五');
我們看下執(zhí)行結(jié)果:
可以看到,修改auto_increment的初始值和步長成功 !
3、auto_increment的問題
這里以 auto_increment的默認情況為例(初始值為1,步長為1)
有一種特殊的情況,我們一起看以下示例。
在黑窗口執(zhí)行以下指令:
-- 刪除表test drop table test; -- 創(chuàng)建表test create table test( id int(10) primary key, name varchar(50) ); insert into test values (1,'張三'); insert into test values (3,'李四'); insert into test values (5,'王五');
執(zhí)行結(jié)果如下圖:
接下來,我們?yōu)閠est表的id列添加 auto_increment
alter table test change id tid int(10) auto_increment;
因為test表中的數(shù)據(jù) id 的值時 1、3、5 , 所以我們希望通過修改auto_increment的初始值和步長,來補充中間空缺的id的值,
比如 2、4 ,所以 我們可以修改auto_increment的默認設(shè)置。如下指令:
-- 修改auto_increment的初始值和步長 set @@auto_increment_increment=2; --設(shè)置步長為2 set @@auto_increment_offset=2; --設(shè)置初始值
查看修改后的auto_increment相關(guān)信息:
接下來我們再次為test表插入測試數(shù)據(jù):
insert into test (name) values ('薛之謙'); insert into test (name) values ('毛不易'); insert into test (name) values ('鄧紫棋');
查詢下最終的結(jié)果:
大家發(fā)現(xiàn),并不是我們想要的結(jié)果。其實auto_increment在使用時,會對初始值與添加了auto_increment語法的列中的值進行比較,當 auto_increment的當前值(此處值是2)小于 添加了該語法的列的值時,auto_increment會拿當前值2 根據(jù)步長(2)遞增,知道auto_increment的當前值大于添加了該語法的列(id)的值時,才會將最終的這個值作為初始插入數(shù)據(jù)的值。也就是說,執(zhí)行以下流程:
auto_increment 初始值 2 步長2
插入第一條數(shù)據(jù) '薛之謙 ' 時,會拿2跟表中數(shù)據(jù)的id的值進行比較
2>1
2<3 auto_increment 此時會遞增一次,遞增后的結(jié)果是4
4>3
4<5 auto_increment 此時會繼續(xù)遞增一次,遞增后的值是6
6>5
此時表中已經(jīng)沒有其他的數(shù)據(jù),6最大,此時才執(zhí)行插入 第一條數(shù)據(jù) '薛之謙',因此,'薛之謙' 的 id = 6,
因為步長是2,所以后面id的值依是 id = 8 ,id= 10 . 所以才會發(fā)生剛剛大家的那種情況。
auto_increment 在插入數(shù)據(jù)時,真正一開始可以插入表中的值得計算公式:
假設(shè) a 為 表中id列的最大值, b為auto_increment的初始值,c 為步長,則auto_increment真正的初始值為:
auto_increment_real = int( a/b) * c + c ;
即 auto_increment_real =(5 % 2)*2 + 2 = 6
參考mysql官方文檔地址:官方文檔在此,公式出自此處
到此這篇關(guān)于MySQL中使用auto_increment修改初始值和步長的文章就介紹到這了,更多相關(guān)MySQL修改初始值和步長內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL自增鎖(Auto-Increment Lock) 的原理使用
- mysql?自增長約束(auto_increment)的使用
- MySQL自增列解析(Auto_increment)
- MySQL AUTO_INCREMENT 主鍵自增長的實現(xiàn)
- 詳細聊聊MySQL中auto_increment有什么作用
- MySQL 序列 AUTO_INCREMENT詳解及實例代碼
- MySQL查詢和修改auto_increment的方法
- 解析mysql中的auto_increment的問題
- 怎么重置mysql的自增列AUTO_INCREMENT初時值
- MySQL 設(shè)置AUTO_INCREMENT 無效的問題解決
相關(guān)文章
巧用mysql提示符prompt清晰管理數(shù)據(jù)庫的方法
隨著管理mysql服務(wù)器越來越多,同樣的mysql>的提示符有可能會讓你輸入錯誤的命令到錯誤的數(shù)據(jù)庫,這時候需要巧用mysql的提示符,這是我的提示符root@localhost(mysql) 08:55:21> 用prompt命令實現(xiàn)(適用于windows和linux環(huán)境)2009-08-08Mysql| 使用通配符進行模糊查詢詳解(like,%,_)
這篇文章主要介紹了Mysql| 使用通配符進行模糊查詢詳解(like,%,_),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08MySQL 動態(tài)分區(qū)管理自動化與優(yōu)化實踐記錄
本文將詳細介紹如何通過 MySQL 的存儲過程和事件調(diào)度器實現(xiàn)動態(tài)分區(qū)管理,確保分區(qū)表能夠自動適應(yīng)數(shù)據(jù)增長,同時避免分區(qū)沖突,感興趣的朋友一起看看吧2025-05-05MySQL查詢優(yōu)化--調(diào)整內(nèi)部變量的詳解
本篇文章是對MySQL查詢優(yōu)化中的調(diào)整內(nèi)部變量進行了詳細的分析介紹,需要的朋友參考下2013-06-06