chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

自增主鍵去哪了?---一次開發(fā)過程中的思考

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-09-05 14:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前情提要:

最近新接了一個需求,需要去創(chuàng)建兩張表,其中有一張表需要根據(jù)業(yè)務(wù)id和業(yè)務(wù)類型建立唯一索引,對數(shù)據(jù)唯一性進行約束。

因為涉及到業(yè)務(wù)嘛,表結(jié)構(gòu)就進行縮略了

表結(jié)構(gòu)示例如下:

CREATE TABLE `example_table` ( 
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵', 
    `business_id` bigint(20) unsigned NOT NULL COMMENT '業(yè)務(wù)ID', 
    `business_type` tinyint(3) unsigned NOT NULL COMMENT '業(yè)務(wù)類型,', 
    `del` tinyint(1) unsigned DEFAULT '0' COMMENT '刪除標識,0表示未刪除,1表示刪除', 
    `creator` varchar(50) NOT NULL COMMENT '創(chuàng)建人PIN', 
    `modify_date` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', 
    `create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間', 
     PRIMARY KEY (`id`), 
     UNIQUE KEY `uk_business_id_and_type` (`business_id`,`business_type`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='示例表'

既然表建立好,那么就是發(fā)揮我們編碼能力的時候了...此處省略一堆編碼時間。

編碼結(jié)束,自測結(jié)束,信心滿滿的找前端同學(xué)進行聯(lián)調(diào)。

因為聯(lián)調(diào)嘛,mock了很多同樣的business_id和bussiness_type的數(shù)據(jù),結(jié)果到了數(shù)據(jù)庫,因為唯一索引的約束,報了一堆錯誤,插入都失敗了。

終于調(diào)整了一下mock數(shù)據(jù),插入成功了。

但是發(fā)生了一個比較神奇的現(xiàn)象

wKgaombZS8uAP3YWAAWjhNZXIGk416.png

主鍵不是連續(xù)自增的了~~ 中間丟失的自增主鍵去哪了??

關(guān)于自增主鍵

自增主鍵是我們在設(shè)計數(shù)據(jù)庫表結(jié)構(gòu)時經(jīng)常使用的主鍵生成策略,主鍵的生成可以完全依賴數(shù)據(jù)庫,在新增數(shù)據(jù)的時候,我們只需要將主鍵設(shè)置為null,0或者不設(shè)置該字段,數(shù)據(jù)庫就會為我們自動生成一個主鍵值。

首先,我們要知道 自增主鍵保存在哪里~

不同的引擎對于自增值的保存策略不同

1.MyISAM引擎的自增值保存在數(shù)據(jù)文件中

2.InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在內(nèi)存里,并沒有持久化。每次重啟后,第一次打開表的時候,都會去找自增值的最大值max(id),然后將max(id)+步長(建表語句中的指定步長)作為這個表當前的自增值。在MySQL8.0版本,將自增值的變更記錄在了redo log中,重啟的時候依靠redo log恢復(fù)重啟之前的值。

了解了自增主鍵的保存機制,再了解一下主鍵這個"自增"邏輯~

wKgaombZS82AQfL8AAIuOmenPaY302.png

插入一條語句分配自增主鍵id值的流程如圖所示。

自增主鍵不連續(xù)的情況

細心的小伙伴一定發(fā)現(xiàn)了~咦,這個ID=聲明值的話,ID就可以能被隨意指定了,那么ID就可能存在不是自增的情況了!

是的,這其實就是第一種自增主鍵不連續(xù)的情況。

第二種不連續(xù)的情況就是我們在聯(lián)調(diào)中遇到的問題了

簡單來做個測試,目前數(shù)據(jù)就像一開始的圖一樣,id自增到了24,下一個插入的應(yīng)該是25,那么執(zhí)行一條sql

insert into example_table  values (null,111,1,0,'mock',now(),now());

wKgZombZS8-AJA0AAAD8FU1x49g171.png

插入成功了一條數(shù)據(jù),主鍵是連續(xù)自增的。

那么我們模擬一條錯誤的sql呢(`creator`字段指定錯類型)~:

insert into example_table  values (null,112,1,0,mock,now(),now());

果然,執(zhí)行sql 的時候報出異常:

wKgaombZS9CAOwk1AAEIK9mIHbg535.png

繼續(xù)執(zhí)行一條正確的正常的sql,插入結(jié)果:

wKgZombZS9GAMw3yAAF4RL7KqZM690.png

主鍵還是連續(xù)自增的。這個發(fā)生錯誤為什么自增主鍵還是連續(xù)的呢。我們模擬一下之前聯(lián)調(diào)遇到的情況,插入一條 sql:

insert into example_table  values (null,112,1,0,'mock',now(),now());

因為id=26的數(shù)據(jù)buiness_id和bussiness_type 跟新插入的這條數(shù)據(jù)一樣,那么肯定會因為唯一索引插入不成功,果然,執(zhí)行結(jié)果如下:

wKgZombZS9KAUqsUAAFR3CsCMEY955.png

那么,我們修改一下sql繼續(xù)插入呢?

insert into example_table  values (null,113,1,0,'mock',now(),now())

wKgaombZS9OAAwLcAAG0qbhHNzs175.png

主鍵發(fā)生了"斷代",27的主鍵跑丟了...

明明都是sql插入的時候錯誤,為什么結(jié)果會有差異呢,有的時候主鍵會丟失,有的時候主鍵不會丟失呢,想要弄明白這個問題,就需要先明白一下一條sql的執(zhí)行過程:

wKgZombZS9SAUHeEAAUNZrjqSmE108.png

這里只是針對本文需要關(guān)注的點(相信小伙伴對這個執(zhí)行過程肯定也是非常了解的

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    379

    瀏覽量

    42230
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    807

    瀏覽量

    46907
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    1040

    瀏覽量

    57113
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    光伏一次調(diào)頻設(shè)備/一次調(diào)頻裝置|光伏一次調(diào)頻涉網(wǎng)試驗/光伏電站一次調(diào)頻建設(shè)改造方案

    2025年以來能源局下發(fā)通知要求10KV以上的新能源廠站要具備一次調(diào)頻能力,并遞交涉網(wǎng)試驗報告。對于投資規(guī)模不大的工商業(yè)分布式光伏電站,又要面臨改造投資問題,壓力較大。如何選擇質(zhì)優(yōu)價廉的一次調(diào)頻產(chǎn)品
    的頭像 發(fā)表于 01-17 08:54 ?1593次閱讀
    光伏<b class='flag-5'>一次</b>調(diào)頻設(shè)備/<b class='flag-5'>一次</b>調(diào)頻裝置|光伏<b class='flag-5'>一次</b>調(diào)頻涉網(wǎng)試驗/光伏電站<b class='flag-5'>一次</b>調(diào)頻建設(shè)改造方案

    光伏一次調(diào)頻設(shè)備,光伏電站一次調(diào)頻建設(shè)改造方案

    地控制機組有功功率的增減,限制電網(wǎng)頻率變化,使電網(wǎng)頻率維持穩(wěn)定的自動控制過程。當電網(wǎng)頻率升高時,一次調(diào)頻功能要求機組快速減少有功功率的輸出,反之,當電網(wǎng)頻率下降時,一次調(diào)頻裝置就會減少發(fā)電機組有功功率
    發(fā)表于 01-16 20:06

    一次消諧器對電力系統(tǒng)的核心貢獻

    一次消諧器(又稱 PT 一次消諧裝置)是安裝在電壓互感器一次側(cè)中性點與地之間的非線性電阻設(shè)備,主要應(yīng)用于3-66kV 中性點不接地或經(jīng)消弧線圈接地的壓配電網(wǎng),對保障電力系統(tǒng)安全穩(wěn)定運
    的頭像 發(fā)表于 01-07 06:40 ?526次閱讀
    <b class='flag-5'>一次</b>消諧器對電力系統(tǒng)的核心貢獻

    從軟件到硬件的轉(zhuǎn)場:場由OceanOS-CM0啟發(fā)的嵌入式思考

    材料,更是套思維訓(xùn)練工具。它引導(dǎo)軟件開發(fā)者完成一次“著陸”——從虛擬的軟件世界,降落到具體的硬件現(xiàn)實。 在這個過程中,我們學(xué)到的不僅是如何點亮LED、如何配置串口、如何使用互斥鎖,更
    發(fā)表于 01-04 15:52

    開發(fā)過程中如何利用CW32L083系列微控制器的官方固件庫進行程序編寫和調(diào)試?

    開發(fā)過程中,如何利用CW32L083系列微控制器的官方固件庫進行程序編寫和調(diào)試?
    發(fā)表于 12-15 07:23

    解析一次消諧和二消諧的差異與應(yīng)用場景

    在電力系統(tǒng),消諧裝置是保障系統(tǒng)穩(wěn)定運行的關(guān)鍵設(shè)備,它可以有效消除諧振過電壓,避免因諧振引發(fā)的設(shè)備損壞和停電事故。一次消諧器和微機消諧裝置,都可以用于PT柜,保護電壓互感器。 一次消諧器和微機消諧
    的頭像 發(fā)表于 12-11 11:33 ?626次閱讀

    SAA認證常見被拒原因分析:如何一次通過審核順利清關(guān)?

    設(shè)計不符合標準,最終導(dǎo)致認證被駁回或市場抽查不合格。本文結(jié)合2025年最新監(jiān)管趨勢,深入剖析SAA認證過程中最常見的被拒原因,并提供針對性解決方案,助您一次通過審
    的頭像 發(fā)表于 11-24 10:46 ?1037次閱讀
    SAA認證常見被拒原因分析:如何<b class='flag-5'>一次</b>通過審核順利清關(guān)?

    根線也能有“責(zé)任感”?HDMI線守護每一次重要放映

    體驗。而在這類“不容出錯”的場景,有根常被忽視的線纜,始終處于信號鏈路的最后環(huán)——HDMI線。 它沒有屏幕展示畫面,沒有揚聲器傳遞
    的頭像 發(fā)表于 10-20 17:50 ?723次閱讀

    開發(fā)指南】全志系列核心板開發(fā)過程中的常見問題及排查策略

    在長期提供技術(shù)支持服務(wù)的過程中,飛凌嵌入式總結(jié)了用戶開發(fā)全志系列產(chǎn)品時常見的問題及排查方法。本文中,小編將為大家梳理這些經(jīng)驗,助力開發(fā)者快速定位問題,提升開發(fā)效率。
    的頭像 發(fā)表于 10-15 08:04 ?7024次閱讀
    【<b class='flag-5'>開發(fā)</b>指南】全志系列核心板<b class='flag-5'>開發(fā)過程中</b>的常見問題及排查策略

    UPS不間斷電源在放電過程中的注意事項

    UPS在日常的使用過程中,只有定期對UPS放電才能延長UPS的使用壽命,UPS 電源電池需要每三個月進行一次充放電,怎樣對UPS進行放電才能讓其保持在最佳工作狀態(tài)? 現(xiàn)在,由匯智天源工程師和大家聊
    的頭像 發(fā)表于 10-11 11:33 ?787次閱讀
    UPS不間斷電源在放電<b class='flag-5'>過程中</b>的注意事項

    濕法去膠第一次不干凈會怎么樣

    在半導(dǎo)體制造過程中,若濕法去膠第一次未能完全去除干凈,可能引發(fā)系列連鎖反應(yīng),對后續(xù)工藝和產(chǎn)品質(zhì)量造成顯著影響。以下是具體后果及分析:殘留物導(dǎo)致后續(xù)工藝缺陷薄膜沉積異常:未清除的光刻膠殘留會作為異物
    的頭像 發(fā)表于 09-16 13:42 ?844次閱讀
    濕法去膠第<b class='flag-5'>一次</b><b class='flag-5'>去</b>不干凈會怎么樣

    芯片研發(fā)過程中的兩種流片方式

    芯片在研發(fā)過程中一般包含4個階段:芯片設(shè)計、生產(chǎn)樣片、測試驗證和大規(guī)模量產(chǎn)。在完成芯片設(shè)計后,工程師們需要先拿到些芯片樣片,用它們進行測試和驗證,來判斷新研發(fā)的芯片在功能和性能上是否符合設(shè)計要求
    的頭像 發(fā)表于 09-09 15:04 ?2467次閱讀
    芯片研<b class='flag-5'>發(fā)過程中</b>的兩種流片方式

    英語單詞學(xué)習(xí)頁面+單詞朗讀實現(xiàn) -- 【2】單詞朗讀實現(xiàn) ##HarmonyOS SDK AI##

    ? 注:我需要先強調(diào)下,我的目的不是把官網(wǎng)文檔里的東西復(fù)制遍……而是分享自己實際開發(fā)過程中遇到的問題和思考 仍然先放下效果圖 ? 這里
    發(fā)表于 06-29 23:26

    使用CY7C65213開發(fā)過程中,應(yīng)該用哪個interface進行uart通信?

    在使用CY7C65213開發(fā)過程中,我想用CyUartRead讀數(shù)據(jù),但是好像沒有接口的deviceType是CY_TYPE_UART,想請問我應(yīng)該用哪個interface進行uart通信? 是否有相關(guān)指導(dǎo)文件,或描述符指導(dǎo)?
    發(fā)表于 06-03 07:04

    一次消諧裝置與二消諧裝置區(qū)別、一次消諧器與二消諧器的區(qū)別

    一次消諧器與二消諧器是電力系統(tǒng)中用于抑制諧振過電壓的不同裝置,主要區(qū)別如下: 安裝位置:一次消諧器串聯(lián)于電壓互感器(PT)一次側(cè)中性點與地之間,直接承受高電壓;二
    的頭像 發(fā)表于 05-07 09:58 ?4851次閱讀
    <b class='flag-5'>一次</b>消諧裝置與二<b class='flag-5'>次</b>消諧裝置區(qū)別、<b class='flag-5'>一次</b>消諧器與二<b class='flag-5'>次</b>消諧器的區(qū)別