MySQL數(shù)據(jù)庫刪除數(shù)據(jù)自增ID不連續(xù)的實現(xiàn)示例
MySQL數(shù)據(jù)庫刪除數(shù)據(jù)后,再新增數(shù)據(jù)就會導(dǎo)致自增ID不連續(xù)
解決方法
1. 刪除一行數(shù)據(jù)后,其后數(shù)據(jù)自增ID值減一(mapper.xml)
update 表名 set id = id - 1 where id > #{deleteId}2. 更新下一個自增ID值
當(dāng)設(shè)置值小于 max(id) 時,會自動設(shè)置為 max(id)+1 ,故一般設(shè)置為1就好
alter table 表名 auto_increment = 1
性能優(yōu)化
上述方法每次刪除數(shù)據(jù)都要執(zhí)行,可通過MySql的定時任務(wù)實現(xiàn)性能優(yōu)化——每天零點進行自增ID重置
1. 定義重置自增ID的存儲過程
create procedure p_reset_id()
begin
set @i = 0;
update 表名 set id = (@i := @i + 1);
alter table 表名 auto_increment = 1;
end2. 開啟事件調(diào)度器
show variables like 'event_scheduler'; set global event_scheduler = on;
3. 定義事件/定時任務(wù)
create event e_reset_id on schedule every 1 day starts '2024-10-12 00:00:00' do call p_reset_id();
到此這篇關(guān)于MySQL數(shù)據(jù)庫刪除數(shù)據(jù)自增ID不連續(xù)的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL 刪除數(shù)據(jù)自增ID不連續(xù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)庫Sql實現(xiàn)截取時間段和日期實例(SQL時間截取)
在許多情況下你也許只想得到日期和時間的一部分,而不是完整的日期和時間,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫Sql實現(xiàn)截取時間段和日期(SQL時間截取)的相關(guān)資料,需要的朋友可以參考下2023-05-05
PureFTP借助MySQL實現(xiàn)用戶身份驗證的操作教程
這篇文章主要介紹了PureFTP借助MySQL實現(xiàn)用戶身份驗證的操作教程,就像普通程序中的用戶注冊功能那樣為用戶登陸數(shù)據(jù)信息建立一個數(shù)據(jù)庫來進行驗證,需要的朋友可以參考下2015-12-12
mysql server is running with the --skip-grant-tables option
今天在mysql中新建數(shù)據(jù)庫提示The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,原來是數(shù)據(jù)中配置的--skip-grant-tables,這樣安全就降低了,這個一般當(dāng)忘記root密碼的時候需要這樣操作2017-07-07
如何解決mysql的count()函數(shù)條件表達式不生效問題
該文章總結(jié)了SQL查詢中`count`函數(shù)統(tǒng)計錯誤的原因,以及三種解決方法:使用`ornull`方法、`IF()`函數(shù)和`casewhen`表達式,當(dāng)不滿足條件時,表達式的值為NULL2024-11-11

