黄色视频免费日本|青青AV黄色无码国一区二四|绯色av无码亚洲黄色A|国产无码高清乱伦|成人免费av免费|亚洲免费性爱网址|a级毛片观看大奶欧美在线|日韩激情在线摩擦AV|久久草在观看国产香蕉久|日本一本免费一区二区三区

歡迎訪(fǎng)問(wèn)漢海網(wǎng),帶你進(jìn)入知識(shí)的海洋!

數(shù)據(jù)庫(kù)怎么設(shè)置id自增?數(shù)據(jù)庫(kù)自增id用完了怎么辦

云停橈 分享 時(shí)間: 瀏覽:0

數(shù)據(jù)庫(kù)作為功能強(qiáng)大的工具,迄今為止已幫助很多小伙伴完成了繁瑣的工作,但是想要在操作軟件時(shí)更省時(shí)省力,掌握其中的操作技巧也是不可或缺的一部分。今天,小編就數(shù)據(jù)庫(kù)怎么設(shè)置id自增,以及數(shù)據(jù)庫(kù)自增id用完了...

數(shù)據(jù)庫(kù)作為功能強(qiáng)大的工具,迄今為止已幫助很多小伙伴完成了繁瑣的工作,但是想要在操作軟件時(shí)更省時(shí)省力,掌握其中的操作技巧也是不可或缺的一部分。今天,小編就數(shù)據(jù)庫(kù)怎么設(shè)置id自增,以及數(shù)據(jù)庫(kù)自增id用完了怎么辦為主題,將解決辦法悉數(shù)附上,希望大家喜歡。

數(shù)據(jù)庫(kù)怎么設(shè)置id自增

1、首先檢查你的新聞表ID列的數(shù)據(jù)類(lèi)型,要設(shè)置為自增列,需要該列的數(shù)據(jù)類(lèi)型為int或者bigint等數(shù)值類(lèi)型

2、打開(kāi)sqlserver management studio,右鍵點(diǎn)擊你的新聞表,選擇“設(shè)計(jì)”

3、在第1步打開(kāi)的表結(jié)構(gòu)設(shè)置界面,點(diǎn)擊你的列“ID”,在底下的列屬性設(shè)置界面做如下設(shè)置

4、進(jìn)行完以上步驟,即可在該數(shù)據(jù)表中插入數(shù)據(jù)時(shí),不用給ID列賦值,ID列的值會(huì)自動(dòng)生成,并且該列的值會(huì)自動(dòng)增長(zhǎng)

數(shù)據(jù)庫(kù)自增id用完了怎么辦

這個(gè)問(wèn)題其實(shí)可以分為有主鍵 & 無(wú)主鍵兩種情況回答。

國(guó)際慣例,先上張腦圖

有主鍵

如果你的表有主鍵,并且把主鍵設(shè)置為自增。

在 MySQL 中,一般會(huì)把主鍵設(shè)置成 int 型。而 MySQL 中 int 型占用 4 個(gè)字節(jié),作為有符號(hào)位的話(huà)范圍就是 [-231,231-1],也就是[-2147483648,2147483647];無(wú)符號(hào)位的話(huà)最大值就是 2^32-1,也就是 4294967295。

1、下面以有符號(hào)位創(chuàng)建一張表

2、插入一個(gè) id 為最大值 2147483647 的值,如下圖所示

3、如果此時(shí)繼續(xù)下面的插入語(yǔ)句

4、結(jié)果就會(huì)造成主鍵沖突

5、解決方案

雖說(shuō) int 4 個(gè)字節(jié),最大數(shù)據(jù)量能存儲(chǔ) 21 億。你可能會(huì)覺(jué)得這么大的容量,應(yīng)該不至于用完。但是互聯(lián)網(wǎng)時(shí)代,每天都產(chǎn)生大量的數(shù)據(jù),這是很有可能達(dá)到的。

所以,我們的解決方案是把主鍵類(lèi)型改為 bigint,也就是 8 個(gè)字節(jié)。這樣能存儲(chǔ)的最大數(shù)據(jù)量就是 2^64-1,我也數(shù)不清有多少了。反正在你有生之年應(yīng)該是夠用的。

PS:?jiǎn)伪?21 億的數(shù)據(jù)量顯然不現(xiàn)實(shí),一般來(lái)說(shuō)數(shù)據(jù)量達(dá)到 500 萬(wàn)就該分表了。

沒(méi)主鍵

另一種情況就是建表時(shí)沒(méi)設(shè)置主鍵。這種情況,InnoDB 會(huì)自動(dòng)幫你創(chuàng)建一個(gè)不可見(jiàn)的、長(zhǎng)度為 6 字節(jié)的 row_id,默認(rèn)是無(wú)符號(hào)的,所以最大長(zhǎng)度是 2^48-1。

實(shí)際上 InnoDB 維護(hù)了一個(gè)全局的 dictsys.row_id,所以未定義主鍵的表都共享該 row_id,并不是單表獨(dú)享。每次插入一條數(shù)據(jù),都把全局 row_id 當(dāng)成主鍵 id,然后全局 row_id 加 1。

這種情況的數(shù)據(jù)庫(kù)自增 ID 用完會(huì)發(fā)生什么呢?

1、創(chuàng)建一張無(wú)顯示設(shè)置主鍵的表 t:

2、通過(guò) ps -ef|grep mysql 命令獲取 mysql 的進(jìn)程 ID,然后執(zhí)行命令,通過(guò) gdb 先把 row_id 修改為 1。PS:沒(méi)有 gdb 的,百度安裝下

3、出現(xiàn)下圖就是沒(méi)錯(cuò)的

4、插入三條數(shù)據(jù)

5、此時(shí)的數(shù)據(jù)庫(kù)數(shù)據(jù)

6、gdb 把 row_id 修改為最大值:281474976710656

7、再插入三條數(shù)據(jù)

8、此時(shí)的數(shù)據(jù)庫(kù)數(shù)據(jù)

分析

剛開(kāi)始設(shè)置 row_id 為 1,插入三條數(shù)據(jù) 1、2、3 的 row_id 也理應(yīng)是 1、2、3;這是沒(méi)問(wèn)題的。

接著設(shè)置 row_id 為最大值,緊跟著插入三條數(shù)據(jù)。這時(shí)的數(shù)據(jù)庫(kù)結(jié)果是:4、5、6、3;你會(huì)發(fā)現(xiàn) 1、2 被覆蓋了。

row_id 達(dá)到后最大值后插入的值 4、5、6 的 row_id 分別是 0、1、2;由于 row_id 為 1、2 的值已存在,所以后者的值 5、6 會(huì)覆蓋掉 row_id 為 1、2 的值。

結(jié)論:row_id 達(dá)到最大值后會(huì)從 0 重新開(kāi)始算;前面插入的數(shù)據(jù)就會(huì)被后插入的數(shù)據(jù)覆蓋,且不會(huì)報(bào)錯(cuò)。

總結(jié)

數(shù)據(jù)庫(kù)自增主鍵用完后分兩種情況:

有主鍵,報(bào)主鍵沖突

無(wú)主鍵,InnDB 會(huì)自動(dòng)生成一個(gè)全局的row_id。它到達(dá)最大值后會(huì)從 0 開(kāi)始算,遇到 row_id 一樣時(shí),新數(shù)據(jù)覆蓋舊數(shù)據(jù)。所以,我們還是盡量給表設(shè)置主鍵。

數(shù)據(jù)庫(kù)自增ID的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1、自增,趨勢(shì)自增,可作為聚集索引,提升查詢(xún)效率

2、節(jié)省磁盤(pán)空間。500W數(shù)據(jù),UUID占5.4G,自增ID占2.5G.

3、查詢(xún),寫(xiě)入效率高:查詢(xún)略?xún)?yōu)。寫(xiě)入效率自增ID是UUID的四倍。

缺點(diǎn):

1、導(dǎo)入舊數(shù)據(jù)時(shí),可能會(huì)ID重復(fù),導(dǎo)致導(dǎo)入失敗。

2、分布式架構(gòu),多個(gè)Mysql實(shí)例可能會(huì)導(dǎo)致ID重復(fù)。

總結(jié):

1、單實(shí)例,單節(jié)點(diǎn),由于InnoDB的特性,自增ID效率大于UUID.

2、20個(gè)節(jié)點(diǎn)一下小型分布式架構(gòu):為了實(shí)現(xiàn)快速部署,主鍵不重復(fù),可以采用UUID

3、20到200個(gè)節(jié)點(diǎn):可以采用自增ID+步長(zhǎng)的較快速方案。

4、200個(gè)以上節(jié)點(diǎn)的分布式架構(gòu):可以采用twitter的雪花算法全局自增ID

以上內(nèi)容便是數(shù)據(jù)庫(kù)怎么設(shè)置id自增,以及數(shù)據(jù)庫(kù)自增id用完了怎么辦的解決方案,如遇到同類(lèi)型問(wèn)題而被困擾已久的朋友們可以試著跟上述提供的解決辦法一步步操作,如果這些解決辦法對(duì)大家有所幫助,請(qǐng)多傳閱與關(guān)注本站。

本站通過(guò)AI自動(dòng)登載本文內(nèi)容,文章僅代表原作者個(gè)人觀點(diǎn)。本站旨在傳播優(yōu)質(zhì)文章,文中配圖來(lái)源于網(wǎng)絡(luò),無(wú)商業(yè)用途。如侵犯您的合法權(quán)益請(qǐng)聯(lián)系刪除。

本站部分文章來(lái)自網(wǎng)絡(luò)或用戶(hù)投稿。涉及到的言論觀點(diǎn)不代表本站立場(chǎng)。閱讀前請(qǐng)查看【免責(zé)聲明】發(fā)布者:云停橈,如若本篇文章侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。本文鏈接:http://www.masion.cn/life/141695.html