新聞中心
在數(shù)據(jù)庫設(shè)計(jì)中,自增字段作為一個(gè)非常重要的概念,它為數(shù)據(jù)庫的自動(dòng)化管理提供了很大的幫助。在開發(fā)應(yīng)用程序時(shí),我們通常都會(huì)有一個(gè)需求,需要一個(gè)字段來自動(dòng)地產(chǎn)生一個(gè)唯一的數(shù)字標(biāo)識(shí),以確保每一條數(shù)據(jù)都有一個(gè)不同的標(biāo)識(shí)符。這時(shí)候,我們就需要數(shù)據(jù)庫的自增字段來完成這個(gè)功能。

創(chuàng)新互聯(lián)專注于夏縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。夏縣網(wǎng)站建設(shè)公司,為夏縣等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站建設(shè),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
一、什么是數(shù)據(jù)庫自增字段
數(shù)據(jù)庫自增字段是指一個(gè)自增長(zhǎng)的整數(shù),它的值是由數(shù)據(jù)庫系統(tǒng)自動(dòng)為表中每一行數(shù)據(jù)產(chǎn)生的,并且具有唯一性。自增字段也可以被稱為自動(dòng)編號(hào)或序列號(hào)字段。
通常,自增字段是一個(gè)遞增的整數(shù)序列。在MySQL數(shù)據(jù)庫,自增字段是通過設(shè)置auto_increment關(guān)鍵字來實(shí)現(xiàn)的。在Oracle數(shù)據(jù)庫中,自增字段是通過使用序列(sequence)或自動(dòng)增長(zhǎng)列(autoincrement column)來實(shí)現(xiàn)的。
二、自增字段的作用
1.作為唯一標(biāo)識(shí)符
數(shù)據(jù)庫中的自增字段是非常重要的,因?yàn)樗梢源_保每個(gè)數(shù)據(jù)記錄有一個(gè)唯一的標(biāo)識(shí)符。通過這個(gè)唯一的標(biāo)識(shí)符,我們可以輕松地查找和管理數(shù)據(jù),而不會(huì)出現(xiàn)混淆和錯(cuò)誤插入數(shù)據(jù)。
2.提高效率
自增字段也可以提高數(shù)據(jù)庫的性能和效率。因?yàn)樗亲詣?dòng)增長(zhǎng)的,沒有重復(fù)和間隔的值,這樣可以減少數(shù)據(jù)的冗余,同時(shí)也可以簡(jiǎn)化數(shù)據(jù)表的索引設(shè)計(jì),提高數(shù)據(jù)庫的查詢速度。
3.方便管理
在有些場(chǎng)景下,比如數(shù)據(jù)遷移、備份和恢復(fù)等,自增字段也可以起到方便管理的作用。因?yàn)樽栽鲎侄问怯蓴?shù)據(jù)庫管理系統(tǒng)來自動(dòng)生成的,所以它們的值不會(huì)被用戶修改,也不會(huì)出現(xiàn)重復(fù)的情況,這樣就更容易進(jìn)行數(shù)據(jù)備份和遷移。
三、自增字段的應(yīng)用
1.創(chuàng)建主鍵
自增字段通常被用作主鍵,以保證每個(gè)數(shù)據(jù)記錄都具有唯一性。在一個(gè)表中,主鍵必須是唯一的,并且不能為NULL。自增字段提供了一個(gè)自動(dòng)化的解決方案,可以滿足這個(gè)要求。
2.作為外鍵關(guān)聯(lián)
在數(shù)據(jù)庫設(shè)計(jì)中,多張表之間通常會(huì)存在關(guān)聯(lián)(關(guān)聯(lián)可以是一對(duì)一、一對(duì)多或多對(duì)多關(guān)系)。自增字段也可以作為外鍵,用于關(guān)聯(lián)其他的數(shù)據(jù)表。
3.補(bǔ)充缺少的主鍵值
當(dāng)我們需要導(dǎo)入一些舊數(shù)據(jù)到新的數(shù)據(jù)庫中時(shí),舊數(shù)據(jù)通常沒有主鍵或主鍵值可能不唯一。這時(shí)候,可以通過創(chuàng)建一個(gè)自增字段來為這些數(shù)據(jù)創(chuàng)建一個(gè)新的主鍵,保證數(shù)據(jù)在新的數(shù)據(jù)庫中具有唯一性。
四、自增字段的使用注意點(diǎn)
1.在創(chuàng)建數(shù)據(jù)表時(shí),必須使用auto_increment關(guān)鍵字為自增字段賦初值,否則無法實(shí)現(xiàn)自動(dòng)增長(zhǎng)的效果。
2.在使用自增字段時(shí),需要注意自動(dòng)增長(zhǎng)的范圍。自增字段的默認(rèn)值通常為NULL,而自動(dòng)增長(zhǎng)的范圍是1到2^32-1。
3.在使用自增字段時(shí),需要遵守?cái)?shù)據(jù)庫的規(guī)則和約束,比如主鍵必須唯一和不為空。
4.在進(jìn)行數(shù)據(jù)遷移、備份和還原等操作時(shí),一定要注意自增字段的值是否正確。如果自增字段的值有誤,會(huì)導(dǎo)致數(shù)據(jù)的插入、更新和刪除出現(xiàn)錯(cuò)誤。
五、
數(shù)據(jù)庫自增字段是一個(gè)非常重要的概念,在數(shù)據(jù)庫設(shè)計(jì)和開發(fā)應(yīng)用程序時(shí)都有著廣泛的應(yīng)用。它能夠確保數(shù)據(jù)的唯一性,提高數(shù)據(jù)表的性能和效率,也方便了數(shù)據(jù)管理和維護(hù)。我們需要充分理解自增字段的作用和應(yīng)用,以保證數(shù)據(jù)庫的正確使用和管理。
相關(guān)問題拓展閱讀:
- 達(dá)夢(mèng)數(shù)據(jù)庫,如何查詢表里自增字段是哪個(gè)?
- 怎么在MySql里添加一個(gè)自動(dòng)增長(zhǎng)的ID字段
達(dá)夢(mèng)數(shù)據(jù)庫,如何查詢表里自增字段是哪個(gè)?
–1 表斗并的identity字段可以在找到–比如某張表table_example的自增字段可以這樣碰正找select * from sys.identity_columns where = OBJECT_ID(‘table_example’) –2 有沒有是判斷,這里等價(jià)于是否存在自增字段空吵跡,可以這樣寫:if exists(select * from sys.identity_columns where = OBJECT_ID(‘table_example’)) beginprint ‘Yes’ end else beginprint ‘No’ end
怎么在MySql里添加一個(gè)自動(dòng)增長(zhǎng)的ID字段
alter table test2 add column id int auto_increment not null, add primary key(id);
注意: 一個(gè)表中搜兆亮,最多只能有一個(gè)自動(dòng)字段,并且這個(gè)世寬自動(dòng)字段還必猜鎮(zhèn)須被定義為key。
以插入語句的方法來解決此問題。
如下參考:
1.在添加字段之前,之一個(gè)zd應(yīng)該首先檢查tb1表的當(dāng)前結(jié)構(gòu)。
2.將字段列instance添加到表中,如下圖。
3.再次查看表結(jié)構(gòu),比較添加字段之前和之后的情況。
4.最后,插或歲入新的數(shù)據(jù)行,看看它是什么樣子,最后就加入了自動(dòng)增長(zhǎng)字段如下圖。
注意事項(xiàng):
MySQL使用的SQL語言是訪問數(shù)據(jù)庫最衫則睜常用的標(biāo)準(zhǔn)化語言。MySQL軟件采用雙盯亂重許可政策,分為社區(qū)版和商業(yè)版,由于其體積小,速度快,整體擁有成本低,尤其是開源這一特點(diǎn),一般中小型網(wǎng)站開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫。
alter table test2 add column id int auto_increment not null, add primary key(id);
注意: 一老沒喊個(gè)表中,最多只能有一個(gè)自動(dòng)察穗字段,并且這個(gè)自侍野動(dòng)字段還必須被定義為key。
隨著 MySQL 8.0.16 的發(fā)布,我們?yōu)?MGR 添加了一些功能,以增強(qiáng)其高可用性。其中一個(gè)功能是能夠在某些情況下啟用已離開組的成員自動(dòng)重新加入,而無需用戶干預(yù)。
為了理解這個(gè)功能的好處以及如何使用它,我們將快速查看它背后的概念以及它首先存在的動(dòng)機(jī)。
介紹
MGR 允許 MySQL 用戶輕松管理高可用組,并完成保證系統(tǒng)高可用所需的所有特征,例如容錯(cuò)或故障檢測(cè)。
MGR 中提供的基本保證之一是該組呈現(xiàn)給用戶的是一個(gè)不可分割的整體,這意味著一旦成員加入或離開該組,該更改將立即被其他成員得知。默認(rèn)情況下,組內(nèi)的數(shù)據(jù)本身最終是一致的,盡管可以被修改。為了實(shí)現(xiàn)這種保證,MGR 使用組成員服務(wù),以及通過一致性算法檢測(cè)有沖突的事務(wù)并中止它們。MGR 的這一方面超出了本文的范圍,與成員自動(dòng)重新加入功能并不完全相關(guān),本文不作贅述。
組內(nèi)新成員必須符合一些條件。其中新成員需要在事務(wù)方面趕上組進(jìn)度(是通過選擇組內(nèi)一個(gè)成員來將已處理的事務(wù)流式傳輸給他,在 MGR 中稱坦塌為“捐贈(zèng)”)。最后,只要在此“分布式恢復(fù)”過程中沒有遇到任何錯(cuò)誤,組內(nèi)新成員將被聲明為 ONLINE 狀態(tài)。
MGR 依靠組通信層 (GCS) 來管理組。該層實(shí)現(xiàn)了用于解決沖突事務(wù)的一致性算法,并強(qiáng)制執(zhí)行一些通信特性。對(duì)于實(shí)現(xiàn)前面提到的組的不可分割視圖,這些特性至關(guān)重要,如消息的總順序、安全傳遞或視圖同步等。
GCS 需要能夠檢測(cè)組中哪些成員失效或看起來失效。一旦這些成員被檢測(cè)為失效,就將其從該組中移除,以便保持該組正常使用。為此 GCS 在每個(gè)成員中引入了一個(gè)故障檢測(cè)器,用于分析組內(nèi)交換的消息。如果它在一段時(shí)間內(nèi)沒有收到來自指定成員的消息,則故障檢測(cè)器將對(duì)該成員產(chǎn)生“懷疑”,并認(rèn)為該成員可能已經(jīng)失效。成員從“懷疑”到真正失效的等待時(shí)間是可以配置的。
重新加入成員存在的問題
我們已經(jīng)了解 MGR 必須為了高可用提供的策略,以及它如何實(shí)現(xiàn),接下來請(qǐng)看示例:
一個(gè)小組由三個(gè)成員組成,其中一個(gè)成員偶爾會(huì)遇到丟失數(shù)據(jù)包、斷連或者其它導(dǎo)致無法解決的錯(cuò)誤情況的影響組內(nèi)通信。還要考慮這些錯(cuò)誤持續(xù)時(shí)間超過 group_replication_member_expel_timeout的值。
其中一個(gè)組員發(fā)生故障,小組的其他成員將決定踢出該成員。問題是,一旦該成員重新入組,他將被組驅(qū)逐加入失敗,需要通過手動(dòng)干預(yù)。
如果該成員的驅(qū)逐超時(shí)屬性設(shè)置不為 0,則它將在被驅(qū)逐前等待滿足該時(shí)間量(滾皮將超時(shí)設(shè)置為 0 意味著他將永遠(yuǎn)等待)。超時(shí)后成員將被驅(qū)逐并重新建立連接,并且無法重新加入舊組,需要再次手動(dòng)干預(yù)。
于此,當(dāng)存在網(wǎng)絡(luò)故障時(shí),顯然需要手動(dòng)干預(yù)。
在 MySQL 8.0.16 中,我們引入了自動(dòng)重新加入組的功能,一旦成員被驅(qū)逐出組,它就會(huì)自動(dòng)嘗試重新加入該組,直到達(dá)到預(yù)設(shè)的次數(shù)為止。有時(shí)每次重試之間至少等待5分鐘。
如何啟動(dòng)自動(dòng)重新加入?
可以通過將group_replication_autorejoin_tries設(shè)置為所需的重試次數(shù)來開啟并使用自動(dòng)重新加入功能。
SET GLOBAL group_replication_autorejoin_tries = 3
默認(rèn)值為 0,表示服務(wù)器禁用自動(dòng)重新加入。
如何驗(yàn)證自動(dòng)重新加入?
與 MySQL 中的許多功能一樣,自動(dòng)重新加入過程是可以監(jiān)測(cè)讓備圓的。自動(dòng)重新加入的可檢測(cè)性依賴于性能模式基礎(chǔ)架構(gòu),階段式收集有關(guān)數(shù)據(jù)。
他們獲取以下信息:
事件發(fā)生的線程ID(THREAD_ID)
活動(dòng)名稱(EVENT_NAME)
起止時(shí)間戳以及事件的總持續(xù)時(shí)間(TIMER_START,TIMER_END 和 TIMER_WAIT)
在事件停止之前完成的工作單位和預(yù)估工作單位(WORK_COMPLETED,WORK_ESTIMATED)
因此,當(dāng)自動(dòng)重新加入過程開始時(shí),它將在performance schema中注冊(cè)一個(gè)名為“stage / grouprpl / Undergoing auto-rejoinprocedure”的事件。使用表performance_schema.events_stage_current, performance_schema.events_stages_summary_global_by_event_name和performance_schema.events_stages_history_long我們可以觀察到以下內(nèi)容:
是否正在進(jìn)行自動(dòng)重新加入程序
到目前為止,已經(jīng)減少重試的次數(shù)
直到下一次重試的估計(jì)剩余時(shí)間
自動(dòng)重新加入過程狀態(tài)
可以通過過濾包含“auto-rejoin”字符串的活動(dòng)事件來查找自動(dòng)重新加入過程狀態(tài)(即,是否正在進(jìn)行):
SELECT COUNT(*) FROM performance_schema.events_stages_current
WHERE EVENT_NAME LIKE ‘%auto-rejoin%’;
COUNT(*)
查詢結(jié)果存在,證明服務(wù)器上運(yùn)行了自動(dòng)重新加入過程。
到目前為止的重試次數(shù)
如果正在進(jìn)行自動(dòng)重新加入程序,我們可以通過選擇階段事件上的工作單元數(shù)來檢查到目前為止嘗試的重試次數(shù):
SELECT WORK_COMPLETED FROM performance_schema.events_stages_current WHERE
EVENT_NAME LIKE ‘%auto-rejoin%’;
WORK_COMPLETED
在這個(gè)例子中,到目前為止只有一次嘗試。
預(yù)計(jì)到下次重試的剩余時(shí)間
在每次重新加入嘗試之間,服務(wù)器將處于 5 分鐘的可中斷睡眠中。 重新加入嘗試直到成功或失敗之間的時(shí)間是無法估計(jì)的。 因此,為了粗略估計(jì)剩余時(shí)間,我們可以將到目前為止嘗試的重試次數(shù)乘以 5 分鐘,并減去到目前為止的階段事件所花費(fèi)的時(shí)間,以估計(jì)我們還需要多長(zhǎng)時(shí)間:
SELECT (300.0 – ((TIMER_WAIT*10e-12) – 300.0 * num_retries)) AS time_remaining FROM
(SELECT COUNT(*) – 1 AS num_retries FROM
performance_schema.events_stages_current WHERE EVENT_NAME LIKE ‘%auto-rejoin%’) AS T,
performance_schema.events_stages_current WHERE EVENT_NAME LIKE ‘%auto-rejoin%’;
time_remaining
30.0
所以在這個(gè)例子中,在下一次重新加入之前還有 30 秒。注意性能模式表中的所有時(shí)間記帳都以微秒精度保持,因此我們將 TIMER_WAIT 縮放為秒。
使用自動(dòng)重新加入與驅(qū)逐超時(shí)的權(quán)衡
到目前為止,在這篇文章中我們只關(guān)注自動(dòng)重新加入。實(shí)際上,有兩種不同的方法可以實(shí)現(xiàn)離開組的成員的重新加入:
設(shè)置自動(dòng)重新加入嘗試次數(shù)來實(shí)現(xiàn)自動(dòng)重新加入
設(shè)置該成員的驅(qū)逐超時(shí)時(shí)間然后配合手動(dòng)干預(yù)
能有延緩刪除組內(nèi)可疑成員,并且如果配置為足夠長(zhǎng)的驅(qū)逐超時(shí)時(shí)間,則增加了重新建立連接的機(jī)會(huì),再次與組進(jìn)行交互。
雖然這兩個(gè)功能實(shí)現(xiàn)了相同的目標(biāo),但它們的工作方式是不同的,并且需要權(quán)衡。通過使用驅(qū)逐超時(shí),您可以維護(hù)組中可疑的成員,其缺點(diǎn)是您無法添加或刪除成員或選擇新的主機(jī)。如果通過使用自動(dòng)重新加入,該成員將不再是該組的正常組員,將保持在 superreadonly 模式,直到重新加入該組。但在此期間,重新加入成員的同步舊數(shù)據(jù)的可能性將增加。自動(dòng)重新加入過程可監(jiān)控,而驅(qū)逐超時(shí)不是真正可監(jiān)控的。
所以,總結(jié)一下:
驅(qū)逐超時(shí)的優(yōu)點(diǎn)
– 該成員一直在該組內(nèi)
– 可能更適合足夠小的網(wǎng)絡(luò)故障
驅(qū)逐超時(shí)的缺點(diǎn)
– 在懷疑某個(gè)成員時(shí),無法在該組上添加/刪除成員
– 在懷疑某個(gè)成員時(shí),無法選擇新的主機(jī)
– 您無法監(jiān)控此過程
自動(dòng)重新加入的優(yōu)點(diǎn)
– 該組將在沒有重新加入成員的情況下運(yùn)行,您可以添加/刪除成員并選擇新的主機(jī)
– 您可以監(jiān)控該過程
自動(dòng)重新加入的缺點(diǎn)
– 您增加了重新加入成員上過時(shí)讀取的可能性
– 可能不適合足夠小的網(wǎng)絡(luò)故障
總而言之,我從啟用自動(dòng)重新加入中獲得了什么?
通過啟用自動(dòng)重新加入,您可以減少對(duì)MySQL實(shí)例的手動(dòng)干預(yù)的需要。您的系統(tǒng)
更加適應(yīng)瞬間網(wǎng)絡(luò)故障,同時(shí)滿足對(duì)容錯(cuò)性和高可用的保證。
摘要
我們引入了一個(gè)名為group_replication_autorejoin_tries的新系統(tǒng)變量,允許用戶設(shè)置 MGR 成員在被驅(qū)逐或與組的大多數(shù)人失去聯(lián)系后嘗試重新加入組的次數(shù)。
默認(rèn)情況下,此自動(dòng)重新加入過程處于關(guān)閉狀態(tài)。它能幫助用戶在面對(duì)瞬間網(wǎng)絡(luò)故障時(shí)避免對(duì) MGR 成員進(jìn)行手動(dòng)干預(yù)。
MySQL設(shè)置自增長(zhǎng)ID_百度經(jīng)驗(yàn)
數(shù)據(jù)庫的自增字段的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫的自增字段,數(shù)據(jù)庫自增字段的作用和應(yīng)用,達(dá)夢(mèng)數(shù)據(jù)庫,如何查詢表里自增字段是哪個(gè)?,怎么在MySql里添加一個(gè)自動(dòng)增長(zhǎng)的ID字段的信息別忘了在本站進(jìn)行查找喔。
數(shù)據(jù)庫運(yùn)維技術(shù)服務(wù) ? 數(shù)據(jù)庫自增字段的作用和應(yīng)用 (數(shù)據(jù)庫的自增字段)
管理員 普通
分享到:
相關(guān)推薦
如何使用bat命令刪除數(shù)據(jù)庫? (bat 刪除數(shù)據(jù)庫)
如何使用Java連接MySQL數(shù)據(jù)庫? (java程序連接mysql數(shù)據(jù)庫)
赫斌數(shù)據(jù)庫:數(shù)據(jù)管理新時(shí)代 (赫斌數(shù)據(jù)庫)
數(shù)據(jù)庫中如何設(shè)置性別約束? (數(shù)據(jù)庫性別約束)
Oracle 12c數(shù)據(jù)庫:DBA必備入門指南 (oracle 12c數(shù)據(jù)庫dba入門指南)
清除電腦游戲數(shù)據(jù)庫的簡(jiǎn)單方法 (電腦上面的游戲如何清除數(shù)據(jù)庫)
Java數(shù)據(jù)庫操作中預(yù)處理的使用方法及優(yōu)缺點(diǎn) (java 數(shù)據(jù)庫預(yù)處理)
PL/SQL查詢錯(cuò)誤:用戶名和密碼不匹配 (plsql查詢數(shù)據(jù)庫用戶名和密碼錯(cuò)誤)
隨機(jī)文章
SQL三種刪除數(shù)據(jù)表的方式 (sql三種刪除表中數(shù)據(jù)庫)
沒有密碼如何刪除數(shù)據(jù)庫ID (id沒有密碼怎么刪除數(shù)據(jù)庫)
解決Oracle數(shù)據(jù)庫連接12154錯(cuò)誤問題 (數(shù)據(jù)庫連接12154錯(cuò)誤)
失憶的數(shù)據(jù)庫SID:該怎么辦? (數(shù)據(jù)庫sid忘記了)
數(shù)據(jù)庫賬戶必須更改密碼,確保安全 (數(shù)據(jù)庫賬戶強(qiáng)制密碼過期)
一鍵還原:快速恢復(fù)SharePoint內(nèi)容數(shù)據(jù)庫數(shù)據(jù) (還原sharepoint內(nèi)容數(shù)據(jù)庫)
最近更新
標(biāo)簽
Linux Linux教程 Linux資訊 MacOS MacOS教程 MacOS資訊 MongoDB MongoDB教程 MongoDB資訊 MSSQL MSSQL錯(cuò)誤 MySQL mysql教程 MySQL維護(hù) MySQL資訊 Neo4j Neo4j教程 Neo4j資訊 ORACLE Oracle優(yōu)化 oracle內(nèi)部視圖 oracle參數(shù) oracle開發(fā) oracle異常修復(fù) oracle故障處理 oracle教程 oracle維護(hù) oracle視圖 ORACLE資訊 oracle遠(yuǎn)程維護(hù) ORA錯(cuò)誤碼 Redis Redis教程 Redis資訊 SQLServer SQLServer報(bào)錯(cuò) SQLServer教程 SQLServer資訊 SQL修復(fù) SQL異常 SQL遠(yuǎn)程處理 Windows 技術(shù)文檔 操作系統(tǒng) 數(shù)據(jù)庫
- 登錄
- 注冊(cè)
安全登錄
立即注冊(cè) 忘記密碼?
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
名稱欄目:數(shù)據(jù)庫自增字段的作用和應(yīng)用(數(shù)據(jù)庫的自增字段)
分享地址:http://m.fisionsoft.com.cn/article/dhgisdp.html


咨詢
建站咨詢
