在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-09-05 14:12 ? 次閱讀

前情提要:

最近新接了一個需求,需要去創建兩張表,其中有一張表需要根據業務id和業務類型建立唯一索引,對數據唯一性進行約束。

因為涉及到業務嘛,表結構就進行縮略了

表結構示例如下:

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

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

編碼結束,自測結束,信心滿滿的找前端同學進行聯調。

因為聯調嘛,mock了很多同樣的business_id和bussiness_type的數據,結果到了數據庫,因為唯一索引的約束,報了一堆錯誤,插入都失敗了。

終于調整了一下mock數據,插入成功了。

但是發生了一個比較神奇的現象

wKgaombZS8uAP3YWAAWjhNZXIGk416.png

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

關于自增主鍵

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

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

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

1.MyISAM引擎的自增值保存在數據文件中

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

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

wKgaombZS82AQfL8AAIuOmenPaY302.png

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

自增主鍵不連續的情況

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

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

第二種不連續的情況就是我們在聯調中遇到的問題了

簡單來做個測試,目前數據就像一開始的圖一樣,id自增到了24,下一個插入的應該是25,那么執行一條sql

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

wKgZombZS8-AJA0AAAD8FU1x49g171.png

插入成功了一條數據,主鍵是連續自增的。

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

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

果然,執行sql 的時候報出異常:

wKgaombZS9CAOwk1AAEIK9mIHbg535.png

繼續執行一條正確的正常的sql,插入結果:

wKgZombZS9GAMw3yAAF4RL7KqZM690.png

主鍵還是連續自增的。這個發生錯誤為什么自增主鍵還是連續的呢。我們模擬一下之前聯調遇到的情況,插入一條 sql:

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

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

wKgZombZS9KAUqsUAAFR3CsCMEY955.png

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

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

wKgaombZS9OAAwLcAAG0qbhHNzs175.png

主鍵發生了"斷代",27的主鍵跑丟了...

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

wKgZombZS9SAUHeEAAUNZrjqSmE108.png

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

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發
    +關注

    關注

    0

    文章

    373

    瀏覽量

    41393
  • SQL
    SQL
    +關注

    關注

    1

    文章

    782

    瀏覽量

    44878
  • 編碼
    +關注

    關注

    6

    文章

    967

    瀏覽量

    55574
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    使用CY7C65213開發過程中,應該用哪個interface進行uart通信?

    在使用CY7C65213開發過程中,我想用CyUartRead讀數據,但是好像沒有接口的deviceType是CY_TYPE_UART,想請問我應該用哪個interface進行uart通信? 是否有相關指導文件,或描述符指導?
    發表于 06-03 07:04

    TIM2輸入捕獲,DMA開啟中斷傳輸輸入捕獲數據,程序跑的過程中,DMA直中斷,TIM6只觸發一次中斷,怎么解決?

    用TIM2捕獲輸入的數據,并且通過DMA存儲,在開啟DMA中斷同時,TIM6斷也開啟(用于計時)。但是程序跑的過程中,DMA直中斷,TIM6只觸發一次中斷。
    發表于 03-14 06:39

    歐度MEDI-SNAP一次性醫用插頭發布

    歐度MEDI-SNAP一次性醫用插頭產品組加入新成員啦!為滿足一次性內窺鏡、一次性手術消融刀等設備的耗材需求,歐度將ODU MEDI-SNAP一次
    的頭像 發表于 02-21 16:00 ?438次閱讀

    在linux下開發過程中, DLP4500 GUI無法連接光機怎么解決?

    在linux下開發過程中, DLP4500 GUI 無法連接光機,出現錯誤提示如下: open device_handle error: Is a directory opening path
    發表于 02-20 08:41

    如何在日常開發過程中提高代碼質量

    。 提高代碼質量是個系統工程,本文主要介紹開發人員如何在日常開發過程中提高代碼質量。 01 什么是代碼質量? 代碼質量般用于衡量代碼的“好”和“爛”:“好”代碼表示代碼質量高,“爛
    的頭像 發表于 01-23 09:09 ?484次閱讀
    如何在日常<b class='flag-5'>開發過程中</b>提高代碼質量

    調試ADS1278,讀取數據過程中在下一次SYNC低脈沖信號前出現反復進入中斷的現象,請問是否正確?

    準備檢索變為低,我控制在DRDY下降沿進入中斷讀取數據(僅讀取通道1),但是讀取數據過程中在下一次SYNC低脈沖信號前出現反復進入中斷的現象,請問是否正確?在時序上還有什么問題嗎? 黃色SCLK波形
    發表于 12-25 07:03

    充分考慮設備的體驗性易用性 藍鵬設計部將這理念貫穿于整個研發過程

    設計部還充分考慮設備的易用性。他們深知,個易于使用的設備能夠降低用戶的學習成本,提高用戶的使用效率。因此,在研發過程中,設計部注重從以下幾個方面提升設備的易用性: 1.簡化操作流程:通過優化設備
    發表于 12-24 14:07

    求助,關于LMK5B12204調試I2C過程中遇到的幾個問題求解

    目前在調試I2C過程中遇到如下幾個問題: 1)如果HW_SW_CTRL配置成1時(ROM+I2C模式),一次只讀取0x0C寄存器的值發現值是0x1b,如果讀取兩個或者兩個以上的寄存器值就發生錯誤
    發表于 11-13 06:03

    自己做的TAS5825板子軟件開發過程中怎么接到PPC3上去調試呢?

    我們打算做個TAS5825的板子,PPC3軟件已經申請下來了,有個問題是我們自己做的TAS5825板子軟件開發過程中怎么接到PPC3上去調試呢?
    發表于 10-15 08:15

    一次電源與二電源有什么不同

    在電力系統和電子設備的供電領域中,一次電源與二電源是兩個至關重要的概念。它們各自承擔著不同的功能和角色,共同確保電力供應的穩定性和可靠性。本文將對一次電源與二電源的定義、區別以及它
    的頭像 發表于 10-10 14:10 ?4752次閱讀

    一次電池分類以及應用場景詳解

    01 一次電池簡介 一次電池即原電池(primarycell、primarybattery)(俗稱干電池),是放電后不能再充電使其復原的電池,通電電池有正極、負極電解以及容器和隔膜等組成。 一次電池
    的頭像 發表于 09-30 17:52 ?2539次閱讀
    <b class='flag-5'>一次</b>電池分類以及應用場景詳解

    ODU MEDI-SNAP一次性醫用插拔鎖插頭產品介紹

    為滿足一次性內窺鏡、一次性手術消融刀等設備的耗材需求,歐度全新推出了MEDI-SNAP一次性醫用插拔鎖插頭,為醫療客戶打造
    的頭像 發表于 09-10 09:59 ?790次閱讀

    康謀分享 | 在基于場景的AD/ADAS驗證過程中,識別挑戰性場景!

    基于場景的驗證是AD/ADAS系統開發過程中的重要步驟,然而面對海量駕駛記錄數據時,如何實現自動且高效地識別、分類和提取駕駛記錄的挑戰性場景?本文康謀為您介紹IVEX軟件識別挑戰性場景并進行數據分析的強大功能。
    的頭像 發表于 08-28 10:16 ?1372次閱讀
    康謀分享 | 在基于場景的AD/ADAS驗證<b class='flag-5'>過程中</b>,識別挑戰性場景!

    電氣一次設備有哪些其功能是什么

    電氣一次設備是指那些直接參與電能的生產、轉換以及輸配過程的設備。這些設備在電力系統扮演著核心角色,確保電能從生產到消費的各個環節能夠高效、安全地進行。具體來說,電氣一次設備主要包括以
    的頭像 發表于 08-27 14:50 ?2005次閱讀

    記錄一次使用easypoi時與源碼博弈的過程

    、背景介紹 最近剛剛接手保險線之聲平臺的開發和維護工作,第個需要修復的問題是:平臺的事件導出成excel功能在經過
    的頭像 發表于 07-03 16:33 ?538次閱讀
    記錄<b class='flag-5'>一次</b>使用easypoi時與源碼博弈的<b class='flag-5'>過程</b>
    主站蜘蛛池模板: 日韩一区二区在线观看 | 免费香蕉视频国产在线看 | 丁香婷婷电影 | 欧美日一区| 免费视频网站在线观看 | 免费一级毛毛片 | 亚洲邪恶天堂影院在线观看 | 国产高清在线精品一区 | 天天干天天干天天干天天 | 在线三区 | 中日韩精品视频在线观看 | 激情综合网站 | 最近观看免费高清视频 | 中文字幕精品一区二区2021年 | 丁香六月啪啪 | 一级毛片日韩 | 午夜色网站 | 午夜激情福利视频 | 美女大黄三级视频在线观看 | 午夜精品久久久久久99热7777 | 中文一区在线观看 | 天天摸天天看天天做天天爽 | 久久人成 | 免费高清在线爱做视频 | 国产亚洲人成网站天堂岛 | 开心色99xxxx开心色 | 中文字幕一区在线观看 | 成人区精品一区二区毛片不卡 | 欧美黑人三级 | 国产你懂的在线 | 色片视频网站 | se97se成人亚洲网站在线观看 | 日本欧美一区二区免费视 | 97狠狠操| www射射一区 | 啪啪.com| 农村的毛片丨级 | 色多多视频在线观看免费大全 | 成人在线视频网 | 黄色国产在线视频 | 九色在线观看视频 |