日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自增ID有什么坏处?什么样的场景下不使用自增ID?

發布時間:2024/3/13 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自增ID有什么坏处?什么样的场景下不使用自增ID? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里是修真院后端小課堂,每篇分享文從

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】

八個方面深度解析后端知識/技能,本篇分享的是:

【自增ID有什么壞處?什么樣的場景下不使用自增ID?】

?

1.背景介紹


  • 在MySQL中,數據表的主鍵一般采用id字段自增的形式。使用自增ID給我們帶來不少便捷,但也有不少壞處。

  • 2.知識剖析


  • 2.1什么是自增ID(MySQL數據庫)
    自增ID是在設計表時如果將id字段的值設置為自增的形式也就是AUTO_INCREMENT,
    那么當插入一行數據時就無需指定id,數據表會根據前一個id值+1進行填充。
    指定了AUTO_INCREMENT的列必須要建索引,一般把ID作為主鍵,這樣系統會自動為ID建立索引。
    2.2自增ID有什么好處?
    (1) 增加記錄時,可以不用指定id字段,不用擔心主鍵重復問題。
    (2)數據庫自動編號,速度快,而且是增量增長,按順序存放,對于檢索非常有利;
    (3)數字型,占用空間小,易排序,在程序中傳遞也方便;

  • 3.常見問題


  • 自增ID有什么壞處?
    (1) 不具有連續性,表中auto_increment最大值被刪除,將不會被重用。就是說會跳號(如果設定的auto_increment_increment是1,那么下一次插入的id值將會從被刪除的最大值算起,也就是被刪除的最大值+1)
    (2)歷史數據表的主鍵id會與數據表的id重復,兩張自增id做主鍵的表合并時,id會有沖突,但如果各自的id還關聯了其他表,這就很不好操作。
    (3) 很難處理分布式存儲的數據表,尤其是需要合并表的情況下
    (4) 在系統集成或割接時,如果新舊系統主鍵不同是數字型就會導致修改主鍵數據類型,這也會導致其它有外鍵關聯的表的修改,后果同樣很嚴重;

  • 4.解決方案


    4.1自增ID的替代者UUID自增ID的替代者UUID
    UUID是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。
    UUID的目的,是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人沖突的UUID。在這樣的情況下,就不需考慮數據庫建立時的名稱重復問題。

    4.2 UUID的優點
    (1)能夠保證獨立性,程序可以在不同的數據庫間遷移,效果不受影響。
    (2)保證生成的ID不僅是表獨立的,而且是庫獨立的,這點在你想切分數據庫的時候尤為重要。
    (3)安全性較高
    4.3 UUID的缺點:
    (1)uuid是無序的,這會嚴重影響到表的插入性能。
    (2)uuid占的空間大

    5.編碼實戰

    ?

    6.擴展思考


    由于本人正在學任務一,平時用到的是mysql的自增ID,所以對于自增ID的不具有連續性也是要有解決辦法的。
    方法一:可以用insert 語句直接指定id插入語句
    方法二:設置自增值 ALTER TABLE table_name AUTO_INCREMENT = 1;(數字1可以是由你自定義設置的自增值,table_name就是你要使用的數據表)
    方法三:用truncate table table_name ;語句直接清空表數據并重置自增值(table_name就是你要使用的數據表)

    7.參考文獻


    CSDN、百度百科

    8.更多討論


    (1) UUID在MySQL中是以什么類型存放的呢?
    在MySQL里保存UUID做主鍵,一般是使用char類型存放的。
    (網上有說在PostgreSQL等一些數據庫里,都有專門的UUID類型,在這些數據庫里以UUID做主鍵,效率是沒問題的)
    (2)有沒有辦法解決UUID在MySQL數據庫的效率慢的問題?
    可以把UUID作為邏輯主鍵,物理主鍵依然使用自增ID。
    (3)可以改變自增ID每次的自增量嗎?
    auto_increment_offset表示自增長字段從哪個數開始。
    auto_increment_increment表示自增長字段每次遞增的量,其默認值是1。
    通過set命令修改,不需要重啟mysql,但是要重新打開命令行界面,一般需要用set global來設置(自定義等號后面的數字就可以了)
    set global auto_increment_increment=2;
    set global auto_increment_offset=2;

  • 鳴謝:
    感謝修真院的師兄和CSDN博客上相關的作者,此教程是在他們之前技術分享的基礎上完善而成。

  • 結束語:
    今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚~

  • ?

    PPT鏈接?視頻鏈接

    總結

    以上是生活随笔為你收集整理的自增ID有什么坏处?什么样的场景下不使用自增ID?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。