mysql自動增長的id刪掉後怎麼重新排序

2021-10-05 03:05:29 字數 5032 閱讀 4761

1樓:

刪除一行後 對id重新進行排序

1,刪除原有主鍵:

alter table table_name drop id;

2,新增新主鍵字段:

alter table table_name add id mediumint( 8 ) not null first;

3,設定新主鍵:

alter table table_name modify column id mediumint( 8 ) not null auto_increment,add primary key(id);

mediumint(8)為資料型別

2樓:晴天

我當年是這樣處理的,刪掉自增列後再重新建乙個自增列

3樓:my筱勇

執行完刪除 id 後 執行這個sql語句 alter table 表名 auto_increment = 1

4樓:愛可生雲資料庫

隨著 mysql 8.0.16 的發布,我們為 mgr 新增了一些功能,以增強其高可用性。其中乙個功能是能夠在某些情況下啟用已離開組的成員自動重新加入,而無需使用者干預。

為了理解這個功能的好處以及如何使用它,我們將快速檢視它背後的概念以及它首先存在的動機。

介紹mgr 允許 mysql 使用者輕鬆管理高可用組,並完成保證系統高可用所需的所有特徵,例如容錯或故障檢測。

mgr 中提供的基本保證之一是該組呈現給使用者的是乙個不可分割的整體,這意味著一旦成員加入或離開該組,該更改將立即被其他成員得知。預設情況下,組內的資料本身最終是一致的,儘管可以被修改。為了實現這種保證,mgr 使用組成員服務,以及通過一致性演算法檢測有衝突的事務並中止它們。

mgr 的這一方面超出了本文的範圍,與成員自動重新加入功能並不完全相關,本文不作贅述。

組內新成員必須符合一些條件。其中新成員需要在事務方面趕上組進度(是通過選擇組內乙個成員來將已處理的事務流式傳輸給他,在 mgr 中稱為「捐贈」)。最後,只要在此「分布式恢復」過程中沒有遇到任何錯誤,組內新成員將被宣告為 online 狀態。

mgr 依靠組通訊層 (gcs) 來管理組。該層實現了用於解決衝突事務的一致性演算法,並強制執行一些通訊特性。對於實現前面提到的組的不可分割檢視,這些特性至關重要,如訊息的總順序、安全傳遞或檢視同步等。

gcs 需要能夠檢測組中哪些成員失效或看起來失效。一旦這些成員被檢測為失效,就將其從該組中移除,以便保持該組正常使用。為此 gcs 在每個成員中引入了乙個故障檢測器,用於分析組內交換的訊息。

如果它在一段時間內沒有收到來自指定成員的訊息,則故障檢測器將對該成員產生「懷疑」,並認為該成員可能已經失效。成員從「懷疑」到真正失效的等待時間是可以配置的。

重新加入成員存在的問題

我們已經了解 mgr 必須為了高可用提供的策略,以及它如何實現,接下來請看示例:

乙個小組由三個成員組成,其中乙個成員偶爾會遇到丟失資料報、斷連或者其它導致無法解決的錯誤情況的影響組內通訊。還要考慮這些錯誤持續時間超過 group_replication_member_expel_timeout的值。

其中乙個組員發生故障,小組的其他成員將決定踢出該成員。問題是,一旦該成員重新入組,他將被組驅逐加入失敗,需要通過手動干預。

如果該成員的驅逐超時屬性設定不為 0,則它將在被驅逐前等待滿足該時間量(將超時設定為 0 意味著他將永遠等待)。超時後成員將被驅逐並重新建立連線,並且無法重新加入舊組,需要再次手動干預。

於此,當存在網路故障時,顯然需要手動干預。

在 mysql 8.0.16 中,我們引入了自動重新加入組的功能,一旦成員被驅逐出組,它就會自動嘗試重新加入該組,直到達到預設的次數為止。有時每次重試之間至少等待5分鐘。

如何啟動自動重新加入?

可以通過將group_replication_autorejoin_tries設定為所需的重試次數來開啟並使用自動重新加入功能。

set global group_replication_autorejoin_tries = 3

預設值為 0,表示伺服器禁用自動重新加入。

如何驗證自動重新加入?

與 mysql 中的許多功能一樣,自動重新加入過程是可以監測的。自動重新加入的可檢測性依賴於效能模式基礎架構,階段式收集有關資料。

他們獲取以下資訊:

事件發生的執行緒id(thread_id)

活動名稱(event_name)

起止時間戳以及事件的總持續時間(timer_start,timer_end 和 timer_wait)

在事件停止之前完成的工作單位和預估工作單位(work_completed,work_estimated)

因此,當自動重新加入過程開始時,它將在performance schema中註冊乙個名為「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我們可以觀察到以下內容:

是否正在進行自動重新加入程式

到目前為止,已經減少重試的次數

直到下一次重試的估計剩餘時間

自動重新加入過程狀態

可以通過過濾包含「auto-rejoin」字串的活動事件來查詢自動重新加入過程狀態(即,是否正在進行):

select count(*) from performance_schema.events_stages_current

where event_name like '%auto-rejoin%';

count(*)

查詢結果存在,證明伺服器上執行了自動重新加入過程。

到目前為止的重試次數

如果正在進行自動重新加入程式,我們可以通過選擇階段事件上的工作單元數來檢查到目前為止嘗試的重試次數:

select work_completed from performance_schema.events_stages_current where

event_name like '%auto-rejoin%';

work_completed

在這個例子中,到目前為止只有一次嘗試。

預計到下次重試的剩餘時間

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

所以在這個例子中,在下一次重新加入之前還有 30 秒。注意效能模式表中的所有時間記帳都以微秒精度保持,因此我們將 timer_wait 縮放為秒。

使用自動重新加入與驅逐超時的權衡

設定自動重新加入嘗試次數來實現自動重新加入

設定該成員的驅逐超時時間然後配合手動干預

能有延緩刪除組內可疑成員,並且如果配置為足夠長的驅逐超時時間,則增加了重新建立連線的機會,再次與組進行互動。

雖然這兩個功能實現了相同的目標,但它們的工作方式是不同的,並且需要權衡。通過使用驅逐超時,您可以維護組中可疑的成員,其缺點是您無法新增或刪除成員或選擇新的主機。如果通過使用自動重新加入,該成員將不再是該組的正常組員,將保持在 superreadonly 模式,直到重新加入該組。

但在此期間,重新加入成員的同步舊資料的可能性將增加。自動重新加入過程可監控,而驅逐超時不是真正可監控的。

所以,總結一下:

驅逐超時的優點

- 該成員一直在該組內

- 可能更適合足夠小的網路故障

驅逐超時的缺點

- 在懷疑某個成員時,無法在該組上新增/刪除成員

- 在懷疑某個成員時,無法選擇新的主機

- 您無法監控此過程

自動重新加入的優點

- 該組將在沒有重新加入成員的情況下執行,您可以新增/刪除成員並選擇新的主機

- 您可以監控該過程

自動重新加入的缺點

- 您增加了重新加入成員上過時讀取的可能性

- 可能不適合足夠小的網路故障

總而言之,我從啟用自動重新加入中獲得了什麼?

通過啟用自動重新加入,您可以減少對mysql例項的手動干預的需要。您的系統

更加適應瞬間網路故障,同時滿足對容錯性和高可用的保證。

摘要我們引入了乙個名為group_replication_autorejoin_tries的新系統變數,允許使用者設定 mgr 成員在被驅逐或與組的大多數人失去聯絡後嘗試重新加入組的次數。

預設情況下,此自動重新加入過程處於關閉狀態。它能幫助使用者在面對瞬間網路故障時避免對 mgr 成員進行手動干預。

mysql中的id是自增長 當刪除一條記錄時怎麼樣讓編號重新從1開始編號

5樓:匿名使用者

alter table `database`.`tb` auto_increment=1;

後面的值自己定義

mysql資料庫中使用delete語句時,一般刪除一條記錄後id會不連續,才能讓序號繼續按順序排列?

6樓:匿名使用者

方法一:

truncate table 你的表名 【這樣不但將資料全部刪除,而且重新定位自增的字段】

truncate命令是會把自增的字段還原為從1開始的,或者你試試把table_a清空,

然後取消自增,儲存,再加回自增,這也是自增段還原為1 的方法。

方法二:

deletefrom 你的表名

dbcc checkident(你的表名,reseed,0)【重新定位自增的字段,讓它從1開始】

建立一張mysql的表 已有了id 將id設定成 主鍵自動增

drop table if exists user user為你已經建好的名字 create table user id int 11 not null auto increment,auto increment控制主鍵自曾1 gid int 11 default null,username var...

的自動換行符刪掉怎麼保持段落不變

查詢內容 p 替換內容 打四個空格 勾選萬用字元 查詢 p 替換為 就是四個空格 全部替換 word文件裡怎麼消除非段落換行?開啟word,ctrl h 替換快捷鍵 高階 點一下就可以了 特殊字元,在查詢裡面輸入2個段落標記 顯示為 p p 替換裡面輸入1個 段落標記 顯示為 p 全部替換。點選單欄...

分手後,前男友刪掉關於我的說說相片,換掉網名還有個性簽名,唯獨不刪留言是什麼鬼,別給我亂想的機會

什麼都不用想,他只是忘了刪或者懶得刪,千萬別自作多情給自己胡思亂想的機內會,好好保重自己容,找個比他更好的人,年輕人千萬別對乙份感情鑽牛角尖,好的男孩大把,一定要充實自己,找到自己的方向,不著急身邊多個人,別浪費自己的青春和時間去做些無聊的事,有這個精力不如多看書,多學習。說句不好聽的,女人有時候不...