电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談MySQL中的自增主鍵用完了怎么辦

瀏覽:79日期:2023-10-09 11:21:46

在面試中,大家應該經歷過如下場景

面試官:'用過mysql吧,你們是用自增主鍵還是UUID?'

你:'用的是自增主鍵'

面試官:'為什么是自增主鍵?'

你:'因為采用自增主鍵,數據在物理結構上是順序存儲,性能最好,blabla…'

面試官:'那自增主鍵達到最大值了,用完了怎么辦?'

你:'what,沒復習啊!!' (然后,你就可以回去等通知了!)

這個問題是一個粉絲給我提的,我覺得挺有意(KENG)思(B)!于是,今天我們就來談一談,這個自增主鍵用完了該怎么辦!

正文

簡單版

我們先明白一點,在mysql中,Int整型的范圍如下

淺談MySQL中的自增主鍵用完了怎么辦

我們以無符號整型為例,存儲范圍為0~4294967295,約43億!我們先說一下,一旦自增id達到最大值,此時數據繼續插入是會報一個主鍵沖突異常如下所示

//Duplicate entry ’4294967295’ for key ’PRIMARY’

那解決方法也是很簡單的,將Int類型改為BigInt類型,BigInt的范圍如下

淺談MySQL中的自增主鍵用完了怎么辦

就算你每秒10000條數據,跑100年,單表的數據也才10000*24*3600*365*100=31536000000000這數字距離BigInt的上限還差的遠,因此你將自增ID設為BigInt類型,你是不用考慮自增ID達到最大值這個問題!然而,如果你在面試中的回答如果是

你:'簡單啊,把自增主鍵的類型改為BigInt類型就好了!'

接下來,面試官可以問你一個更坑的問題!

面試官:'你在線上怎么修改列的數據類型的?'

你:'what!我還是回等通知吧!'

怎么改

目前業內在線修改表結構的方案,據我了解,一般有如下三種

方式一:使用mysql5.6+提供的在線修改功能

所謂的mysql自己提供的功能也就是mysql自己原生的語句,例如我們要修改原字段名稱及類型。

mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

那么,在mysql5.5這個版本之前,這是通過臨時表拷貝的方式實現的。執行ALTER語句后,會新建一個帶有新結構的臨時表,將原表數據全部拷貝到臨時表,然后Rename,完成創建操作。這個方式過程中,原表是可讀的,不可寫。在5.6+開始,mysql支持在線修改數據庫表,在修改表的過程中,對絕大部分操作,原表可讀,也可以寫。那么,對于修改列的數據類型這種操作,原表還能寫么?來來來,特意去官網找了mysql8.0版本的一張圖

淺談MySQL中的自增主鍵用完了怎么辦

如圖所示,對于修改數據類型這種操作,是不支持并發的DML操作!也就是說,如果你直接使用ALTER這樣的語句在線修改表數據結構,會導致這張表無法進行更新類操作(DELETE、UPDATE、DELETE)。因此,直接ALTER是不行滴!

那我們只能用方式二或者方式三

方式二:借助第三方工具

業內有一些第三方工具可以支持在線修改表結構,使用這些第三發工具,能夠讓你在執行ALTER操作的時候,表不會阻塞!比較出名的有兩個

pt-online-schema-change,簡稱pt-osc GitHub正式宣布以開源的方式發布的工具,名為gh-ost

以pt-osc為例,它的原理如下

1、創建一個新的表,表結構為修改后的數據表,用于從源數據表向新表中導入數據。

2、創建觸發器,用于記錄從拷貝數據開始之后,對源數據表繼續進行數據修改的操作記錄下來,用于數據拷貝結束后,執行這些操作,保證數據不會丟失。

3、拷貝數據,從源數據表中拷貝數據到新表中。

4、rename源數據表為old表,把新表rename為源表名,并將old表刪除。

5、刪除觸發器。

然而這兩個有意(KENG)思(B)的工具,居然。。。居然。。。唉!如果你的表里有觸發器和外鍵,這兩個工具是不行滴!如果真碰上了數據庫里有觸發器和外鍵,只能硬杠了,請看方式三方式三:改從庫表結構,然后主從切換此法極其麻煩,需要專業水平的選手進行操作。因為我們的mysql架構一般是讀寫分離架構,從機是用來讀的。我們直接在從庫上進行表結構修改,不會阻塞從庫的讀操作。改完之后,進行主從切換即可。唯一需要注意的是,主從切換過程中可能會有數據丟失的情況!

高深版

其實答完上面的問題后,這篇文章差不多完了。但是,還記得我在開頭說的么。這是一個很有意(KENG)思(B)的問題,為什么呢?假設啊,你的表里的自增字段為有符號的Int類型的,也就是說,你的字段范圍為-2147483648到2147483648。一切又那么剛好,你的自增ID是從0開始的,也就是說,現在你的可以用的范圍為0~2147483648。我們明確一點,表中真實的數據ID,肯定會出現一些意外,ID不一定是連續的。例如,有如下情形的出現

CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`),) EN

執行下列SQL

insert into t values(null);// 插入的行是 (1)begin;insert into t values(null);rolllack;insert into t values(null);// 插入的行是 (3)

因此,表中的真實id必然會出現斷續的情況。好,那這會你的自增主鍵id的數據范圍為0~2147483648,也就是單表21億條數據!考慮id會出現斷續,真實數據頂多18億條吧。老哥,都單表18億條了,還不分庫分表?你一旦分庫分表了,就不能依賴于每個表的自增ID來全局唯一標識這些數據了。此時,我們就需要提供一 個全局唯一的ID號生成策略來支持分庫分表的環境。

因此在實際中,你根本等不到自增主鍵用完到情形!因此,專業版回答如下:

面試官:'那自增主鍵達到最大值了,用完了怎么辦?'

你:'這問題沒遇到過,因為自增主鍵我們用int類型,一般達不到最大值,我們就分庫分表了,所以不曾遇見過!'

到此這篇關于淺談MySQL中的自增主鍵用完了怎么辦的文章就介紹到這了,更多相關MySQL 自增主鍵用完內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 刑事律师_深圳著名刑事辩护律师_王平聚【清华博士|刑法教授】 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 上海乾拓贸易有限公司-日本SMC电磁阀_德国FESTO电磁阀_德国FESTO气缸 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 博莱特空压机|博莱特-阿特拉斯独资空压机品牌核心代理商 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | CPSE安博会| 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | U拓留学雅思一站式服务中心_留学申请_雅思托福培训 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 电主轴,车床电磨头,变频制动电机-博山鸿达特种电机 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 安驭邦官网-双向万能直角铣头,加工中心侧铣头,角度头[厂家直销] 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵| 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 中矗模型-深圳中矗模型设计有限公司 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | 周口风机|周风风机|河南省周口通用风机厂 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 计算机毕业设计源码网|