mysql隱藏字段rowid在什么時候是可見的

今天小編給大家分享的是MySQL隱藏字段rowid在什么時候是可見的,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結了以下內(nèi)容,一起往下看吧。一定會有所收獲的哦。

成都創(chuàng)新互聯(lián)專注于桐柏網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供桐柏營銷型網(wǎng)站建設,桐柏網(wǎng)站制作、桐柏網(wǎng)頁設計、桐柏網(wǎng)站官網(wǎng)定制、微信小程序服務,打造桐柏網(wǎng)絡公司原創(chuàng)品牌,更為您提供桐柏網(wǎng)站排名全網(wǎng)營銷落地服務。

mysql隱藏字段rowid在什么時候是可見的

通過我自己的一番實戰(zhàn),可以確定的是,只要創(chuàng)建表,這個rowid一定是存在的,唯一區(qū)別就是顯示和隱士的區(qū)別,也就是是否可以通過select _rowid from table查詢出來
那么問題來了,哪些情況下rowid是顯示的?
1 、當表中有主鍵并且是數(shù)值型的時候才是顯示的
2、當表中沒有主鍵的時候,但是表中有唯一非空并且是數(shù)值型的時候才是顯示的
接下來,創(chuàng)建表來實戰(zhàn)看下,是否是這樣的
先創(chuàng)建一個帶有主鍵并且是數(shù)值型的表
create table  z1(
id bigint(20) primary key 
)engine=innodb;

mysql隱藏字段rowid在什么時候是可見的

再創(chuàng)建一個帶有主鍵不是數(shù)值型的表(雖然業(yè)務不會這樣創(chuàng)建,只是為了證明rowid)
create table  z2(
name varchar(20) primary key 
)engine=innodb;

mysql隱藏字段rowid在什么時候是可見的

再創(chuàng)建一個沒有主鍵但是有唯一鍵并且是數(shù)值型非空的表
create table z3(
    name int(11) not null,
    unique(name)
)engine=innodb charset=utf8

mysql隱藏字段rowid在什么時候是可見的

此時再創(chuàng)建一個沒有主鍵,并且有唯一鍵,但是可以為空或者不是數(shù)值型的表
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;

mysql隱藏字段rowid在什么時候是可見的
mysql隱藏字段rowid在什么時候是可見的

再來看看官網(wǎng)咋說的,再理解下
官網(wǎng)連接: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.
此時我再創(chuàng)建一個表,表中只有一個字段,并且是字符串類型的,看下生成的隱式rowid,達到最大值會發(fā)生什么?(注意此時底層會默認生成一個6字節(jié)的指針,最大值為2^48 次冪)

mysql隱藏字段rowid在什么時候是可見的

此時用gdb工具讓rowid達到最大值再插入看看會怎么樣?
     答:先找到mysqld的進程pid,命令
      ps aux | grep mysqld
     gdb -p 你的mysql的pid -ex 'p dict_sys->row_id=1' -batch

mysql隱藏字段rowid在什么時候是可見的
mysql隱藏字段rowid在什么時候是可見的

可以看到此時插入了3條數(shù)據(jù)

mysql隱藏字段rowid在什么時候是可見的

這個時候把rowid變?yōu)?^48次冪之后,再插入看下效果
gdb -p 29410 -ex 'p dict_sys->row_id=281474976710656' -batch

mysql隱藏字段rowid在什么時候是可見的

此時再插入三條數(shù)據(jù),此時a1 a2被覆蓋了,所以在不滿足上述二種情況的時候,生成的隱式rowid在用盡之后,之前的記錄會被覆蓋,所以創(chuàng)建表一定要有主鍵id,避免發(fā)生覆蓋,雖然概率比較低,這個只是用主鍵的其中一個原因哈

mysql隱藏字段rowid在什么時候是可見的

所以綜上所述:看我xmind那個總結,自己再理解消化下吧。

關于mysql隱藏字段rowid在什么時候是可見的就分享到這里了,希望以上內(nèi)容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

網(wǎng)站標題:mysql隱藏字段rowid在什么時候是可見的
分享地址:http://muchs.cn/article28/gdeecp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、小程序開發(fā)網(wǎng)頁設計公司、商城網(wǎng)站、定制開發(fā)、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管