共計 2000 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
今天丸趣 TV 小編給大家分享的是 mysql 隱藏字段 rowid 在什么時候是可見的,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。
通過我自己的一番實戰,可以確定的是,只要創建表,這個 rowid 一定是存在的,唯一區別就是顯示和隱士的區別,也就是是否可以通過 select _rowid from table 查詢出來
那么問題來了,哪些情況下 rowid 是顯示的?1 、當表中有主鍵并且是數值型的時候才是顯示的
2、當表中沒有主鍵的時候,但是表中有唯一非空并且是數值型的時候才是顯示的
接下來,創建表來實戰看下,是否是這樣的
先創建一個帶有主鍵并且是數值型的表
create table z1(id bigint(20) primary key
)engine=innodb;
再創建一個帶有主鍵不是數值型的表 (雖然業務不會這樣創建,只是為了證明 rowid)
create table z2(name varchar(20) primary key
)engine=innodb;
再創建一個沒有主鍵但是有唯一鍵并且是數值型非空的表
create table z3( name int(11) not null,
unique(name)
)engine=innodb charset=utf8
此時再創建一個沒有主鍵,并且有唯一鍵,但是可以為空或者不是數值型的表
create table z4( name varchar(11) not null,
unique(name)
)engine=innodb charset=utf8;
create table z5( name int(11) ,
unique(name)
)engine=innodb charset=utf8;
再來看看官網咋說的,再理解下
官網連接:https://dev.mysql.com/doc/refman/5.7/en/create-index.html
If a table has a PRIMARY KEY or UNIQUE NOT NULL index that consists of a single column that has an integer type, you can use _rowid to refer to the indexed column in SELECT statements, as follows:
_rowid refers to the PRIMARY KEY column if there is a PRIMARY KEY consisting of a single integer column. If there is a PRIMARY KEY but it does not consist of a single integer column, _rowid cannot be used.
Otherwise, _rowid refers to the column in the first UNIQUE NOT NULL index if that index consists of a single integer column. If the first UNIQUE NOT NULL index does not consist of a single integer column, _rowid cannot be used.
此時我再創建一個表,表中只有一個字段,并且是字符串類型的,看下生成的隱式 rowid,達到最大值會發生什么?(注意此時底層會默認生成一個 6 字節的指針,最大值為 2^48 次冪)
此時用 gdb 工具讓 rowid 達到最大值再插入看看會怎么樣? 答:先找到 mysqld 的進程 pid,命令
ps aux | grep mysqld
gdb -p 你的 mysql 的 pid -ex p dict_sys- row_id=1 -batch
可以看到此時插入了 3 條數據
這個時候把 rowid 變為 2^48 次冪之后,再插入看下效果
gdb -p 29410 -ex p dict_sys- row_id=281474976710656 -batch
此時再插入三條數據,此時 a1 a2 被覆蓋了,所以在不滿足上述二種情況的時候,生成的隱式 rowid 在用盡之后,之前的記錄會被覆蓋,所以創建表一定要有主鍵 id,避免發生覆蓋,雖然概率比較低,這個只是用主鍵的其中一個原因哈
所以綜上所述:看我 xmind 那個總結,自己再理解消化下吧。
關于 mysql 隱藏字段 rowid 在什么時候是可見的就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
向 AI 問一下細節正文完