成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

字節(jié)面試:MySQL自增ID用完會(huì)怎樣?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
如果表沒(méi)有設(shè)置主鍵,InnoDB 會(huì)自動(dòng)創(chuàng)建一個(gè)全局隱藏的 row_id,其長(zhǎng)度為 6 個(gè)字節(jié),當(dāng) row_id 達(dá)到上限后,它的執(zhí)行流程和主鍵 ID 不同,它是再次歸零,然后重新遞增,如果出現(xiàn)相同的 row_id,后面的數(shù)據(jù)會(huì)覆蓋之前的數(shù)據(jù)。

在一些中小型項(xiàng)目開(kāi)發(fā)中,我們通常會(huì)使用自增 ID 來(lái)作為主鍵的生成策略,但隨著時(shí)間的推移,數(shù)據(jù)庫(kù)的信息也會(huì)越來(lái)越多,尤其是使用自增 ID 作為日志表的主鍵生成策略時(shí),可能很快就會(huì)遇到 ID 被用完的情況,那么如果發(fā)生了這種情況,MySQL 又會(huì)怎樣執(zhí)行呢?

PS:當(dāng)然,在分庫(kù)分表的場(chǎng)景中,我們通常會(huì)使用雪花算法來(lái)替代自增 ID,但中小型項(xiàng)目開(kāi)發(fā)中,使用自增 ID 的場(chǎng)景還是比較多的。

1.自增ID

在 MySQL 中,如果字段的數(shù)據(jù)類(lèi)型為整數(shù)類(lèi)型(如 INT、BIGINT 等),則可以通過(guò)關(guān)鍵字“AUTO_INCREMENT”來(lái)設(shè)置讓當(dāng)前的字段實(shí)現(xiàn)自增,例如以下 SQL:

CREATE TABLE example_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(128)
);

1.1 優(yōu)點(diǎn)分析

自增 ID 的優(yōu)點(diǎn)如下:

  1. 簡(jiǎn)單方便,能自動(dòng)為每行數(shù)據(jù)分配唯一的標(biāo)識(shí)。
  2. 對(duì)于按順序插入的數(shù)據(jù),能很好地反映數(shù)據(jù)插入的先后順序。

1.2 缺點(diǎn)分析

自增 ID 的缺點(diǎn)如下:

  • 在數(shù)據(jù)進(jìn)行遷移或分庫(kù)分表時(shí),可能會(huì)出現(xiàn)問(wèn)題,需要特殊處理。
  • 如果數(shù)據(jù)量非常大,可能會(huì)達(dá)到自增 ID 的上限。
  • 存在安全性問(wèn)題,比如通過(guò)自增 ID 可能會(huì)推測(cè)出一些業(yè)務(wù)信息。例如,一個(gè)電商訂單表使用自增 ID 作為主鍵,可能會(huì)被競(jìng)爭(zhēng)對(duì)手通過(guò)訂單號(hào)大致推測(cè)出業(yè)務(wù)量等信息。

2.自增ID用完會(huì)怎樣?

自增 ID 分為以下兩種情況:

圖片圖片

一種是主鍵自增 ID 用完后的情況,另一種是 InnoDB 引擎中未設(shè)置主鍵時(shí)使用 row_id 用完后的場(chǎng)景,它們的情況是不一樣的,所以我們分開(kāi)來(lái)聊。

2.1 主鍵自增ID用完

當(dāng)主鍵自增 ID 達(dá)到上限后,再新增下一條數(shù)據(jù)時(shí),它的 ID 不會(huì)變(還是最大的值),只是此時(shí)再添加數(shù)據(jù)時(shí),因?yàn)橹麈I約束的原因,ID 是不允許重復(fù)的,所以就會(huì)報(bào)錯(cuò)提示主鍵沖突。

我們可以使用以下 SQL 來(lái)測(cè)試:

CREATE TABLE t (
    id INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(128)
) auto_increment=2147483647;
insert into t(id,`name`) values(null,'javacn.site');
select * from t;
insert into t(id,`name`) values(null,'www.javacn.site');

以上 SQL 是創(chuàng)建了一個(gè)表 t,并且給 t 表的主鍵 id 設(shè)置自增 ID,之后再將表的自增 ID 初始化為 INT(有符號(hào))的最大值 2147483647,然后再添加兩條數(shù)據(jù)。

以上 SQL 的執(zhí)行結(jié)果如下:

圖片圖片

從上面的執(zhí)行結(jié)果可以看出:當(dāng)主鍵自增 ID 達(dá)到上限后,再新增下一條數(shù)據(jù)時(shí),它的 ID 不會(huì)變(還是最大的值),只是此時(shí)再添加數(shù)據(jù)時(shí),因?yàn)橹麈I約束的原因,ID 是不允許重復(fù)的,所以就會(huì)報(bào)錯(cuò)提示主鍵沖突。

2.2 row_id用完

如果表沒(méi)有設(shè)置主鍵,InnoDB 會(huì)自動(dòng)創(chuàng)建一個(gè)全局隱藏的 row_id,其長(zhǎng)度為 6 個(gè)字節(jié),當(dāng) row_id 達(dá)到上限后,它的執(zhí)行流程和主鍵 ID 不同,它是再次歸零,然后重新遞增,如果出現(xiàn)相同的 row_id,后面的數(shù)據(jù)會(huì)覆蓋之前的數(shù)據(jù)。

責(zé)任編輯:武曉燕 來(lái)源: Java中文社群
相關(guān)推薦

2023-10-17 09:41:04

自增主鍵MySQL

2024-11-11 00:00:06

MySQLID數(shù)據(jù)類(lèi)型

2020-03-28 15:50:18

數(shù)據(jù)庫(kù)自增ID維護(hù)

2019-09-18 15:49:06

MySQL數(shù)據(jù)庫(kù)面試官

2024-07-01 09:00:16

2023-10-24 15:27:33

Mysql自增主鍵

2018-12-14 15:35:20

MySQL索引數(shù)據(jù)庫(kù)

2022-06-24 09:22:15

MySQL自增id

2022-11-08 19:30:52

DjangoID自增

2023-12-26 01:09:28

MySQL存儲(chǔ)釋放鎖

2024-12-25 15:32:29

2010-03-29 14:09:12

Oracle ID 自

2022-05-18 09:49:26

MySQLID數(shù)據(jù)庫(kù)

2022-02-14 15:03:50

MySQL程序員面試

2022-06-03 08:12:52

InnoDB插入MySQL

2021-05-31 19:50:04

MySQL自增鎖InnoDB

2024-10-24 09:22:30

2022-08-17 08:17:01

SPI機(jī)制接口

2010-04-26 14:03:02

Oracle使用

2011-01-18 09:47:33

自增ID
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一二三在线 | 久久青视频 | 亚洲精品在线免费 | 二区在线视频 | 一级二级三级黄色 | 久久久久久久久淑女av国产精品 | 黄色一级视频免费 | 亚洲欧洲精品成人久久奇米网 | 超碰在线播| 日韩毛片免费看 | 亚洲一区二区三区在线观看免费 | 99re热精品视频 | 亚洲精品国产第一综合99久久 | 成人精品一区 | 日韩欧美国产电影 | 91精品国产综合久久久久久漫画 | 欧美精品一区在线 | 日韩精品一区二区三区在线观看 | 亚洲国产区 | 欧美日韩一区在线观看 | 久久久久久久久精 | 日韩www视频 | 中国美女撒尿txxxxx视频 | 免费av手机在线观看 | 亚洲视频www| 色伊人久久 | 欧美日韩在线免费 | 国产欧美一级二级三级在线视频 | 中国大陆高清aⅴ毛片 | 亚洲精品欧美 | 在线成人| 操操操操操 | 五月天婷婷激情 | 国产成人精品久久二区二区91 | 久久久视频在线 | 国产精品久久影院 | 亚洲一区影院 | 国产一区亚洲二区三区 | 亚洲国产一区二区三区四区 | 国产99久久久国产精品下药 | 一级网站|