mysql index sub part_mysql中的key和index 理解

mysql的key和index多少有點令人迷惑,這實際上考察對數據庫體系結構的了解的。

1 key 是數據庫的物理結構,它包含兩層意義,一是約束(偏重于約束和規范數據庫的結構完整性),二是索引(輔助查詢用的)。包括primary key, unique key, foreign key 等。

primary key 有兩個作用,一是約束作用(constraint),用來規范一個存儲主鍵和唯一性,但同時也在此key上建立了一個index;

unique key 也有兩個作用,一是約束作用(constraint),規范數據的唯一性,但同時也在這個key上建立了一個index;

foreign key也有兩個作用,一是約束作用(constraint),規范數據的引用完整性,但同時也在這個key上建立了一個index;

可見,mysql的key是同時具有constraint和index的意義,這點和其他數據庫表現的可能有區別。(至少在oracle上建立外鍵,不會自動建立index),因此創建key也有如下幾種方式:

(1)在字段級以key方式建立, 如 create table t (id int not null primary key);

(2)在表級以constraint方式建立,如create table t(id int, CONSTRAINT pk_t_id PRIMARY key (id));

(3)在表級以key方式建立,如create table t(id int, primary key (id));

其它key創建類似,但不管那種方式,既建立了constraint,又建立了index,只不過index使用的就是這個constraint或key。

2 index是數據庫的物理結構,它只是輔助查詢的,它創建時會在另外的表空間(mysql中的innodb表空間)以一個類似目錄的結構存儲。索引要分類的話,分為前綴索引、全文本索引等;

因此,索引只是索引,它不會去約束索引的字段的行為(那是key要做的事情)。

如,create table t(id int, index inx_tx_id? (id));

3 最后的釋疑:

(1)我們說索引分類,分為主鍵索引、唯一索引、普通索引(這才是純粹的index)等,也是基于是不是把index看作了key。

比如 create table t(id int, unique index inx_tx_id? (id));? --index當作了key使用

(2)最重要的也就是,不管如何描述,理解index是純粹的index,還是被當作key,當作key時則會有兩種意義或起兩種作用。

實踐結果:

新建一張User表,包含字段id, name。

(1)第一種情況:

mysql> create table user(id int, name varchar(50), age int, primary key(id));

Query OK, 0 rows affected (0.01 sec)

mysql> show create table user;

+-------+------------------------------------

------------------------------------------+

| Table | Create Table

|

+-------+------------------------------------

------------------------------------------+

| user ?| CREATE TABLE `user` (

`id` int(11) NOT NULL default '0',

`name` varchar(50) default NULL,

`age` int(11) default NULL,

PRIMARY KEY ?(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

mysql> show index

mysql> show keys

(2)第二種情況:

mysql> show create table user;

+-------+------------------------------

------------------------------+

| Table | Create Table

|

+-------+------------------------------

------------------------------+

| user ?| CREATE TABLE `user` (

`id` int(11) default NULL,

`name` varchar(50) default NULL,

`age` int(11) default NULL,

KEY `id` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

(3)第三種情況:

mysql> show create table user;

+-------+-----------------------------

------------------------------+

| Table | Create Table

|

+-------+-----------------------------

------------------------------+

| user ?| CREATE TABLE `user` (

`id` int(11) default NULL,

`name` varchar(50) default NULL,

`age` int(11) default NULL,

KEY `id` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

三、總結

(1)當建表時,建立primary key的鍵,同時默認建立對應的index

(2)當建表時,指定某列為key時,那么同時為該鍵建立index,key和index對應的鍵允許null

(3)當建表時,指定某列為index時,那么同時為該鍵建立key,index和key對應的鍵允許null。從建表語句中可以看出key ‘id’ (id),等價于(2)中的情況。

根據(1)(2)(3)說明在以上的使用情況中,index和key沒有什么區別。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534966.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534966.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534966.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【spring cloud】(六)消息總線——springcloud Bus

各位小伙伴們大家好,歡迎來到這個小扎扎的spring cloud專欄,在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Bus…

python快速排序代碼_Python實現快速排序算法

原標題:Python實現快速排序算法 Python實現快速排序算法 快速排序算法是一種基于交換的高效的排序算法,由C.R.A.Hoare于1962年提出,是一種劃分交換排序。它采用了一種分治的策略,通常稱其為分治法(Divide and conquer algorithm)。…

docker mysql 生產環境_如何部署Docker MySQL生產環境?

1 前言Docker容器原則上是短暫的,如果容器被刪除或損毀,數據或配置將丟失,所以上個章節部署的MySQL只適合于測試環境,由于生產的需求,本章將使用Docker卷機制持久保存Docker容器中創建的數據。2 最佳實踐2.1 環境配置2…

kali 切換root權限_Ubuntu 被曝嚴重漏洞:切換系統語言 + 輸入幾行命令,就能獲取 root 權限...

公眾號關注 “GitHubDaily”設為 “星標”,帶你了解技術圈內新鮮事!來自量子位無需系統密碼,就能添加新的 sudo 用戶、獲取 root 權限,事后還能刪除不留痕跡。這是 GitHub 安全研究員 Kevin Backhouse 發現的一個 Ubuntu 系統大漏…

oracle定義變量sql賦值_ORACLE獲取SQL綁定變量值的方法總結

本文總結一下ORACLE數據庫中如何獲取SQL綁定變量值的方法,在SQL優化調優過程中,經常會用到這方面的知識點。在此梳理、總結一下這方面的知識點,方面日后查找、翻閱。方法1:查詢V$SQLV$SQL視圖中的BIND_DATA字段用來存儲綁定變量的…

transition css_Transition 過渡

1:基本概念在一定時間內平滑的過渡,也就是圓滑的以動畫效果改變css的屬性值。它的過渡可以由鼠標點擊、焦點獲取或者失去、被點擊事件或對元素的改變中觸發;不能主動觸發,只能被動觸發。常用的基本屬性有:Transition-d…

jdbc mysql分頁_JDBC【數據庫連接池、DbUtils框架、分頁】

1.數據庫連接池什么是數據庫連接池簡單來說:數據庫連接池就是提供連接的。。。為什么我們要使用數據庫連接池數據庫的連接的建立和關閉是非常消耗資源的頻繁地打開、關閉連接造成系統性能低下編寫連接池編寫連接池需實現java.sql.DataSource接口創建批量的Connectio…

python讀寫文件操作_詳解Python文件讀寫操作

讀文件 打開文件(文件需要存在)#打開文件 f open("data.txt","r") #設置文件對象 print(f)#文件句柄 f.close() #關閉文件 #為了方便,避免忘記close掉這個文件對象,可以用下面這種方式替代 with open(data.t…

keyloadtool_phoenix 利用CsvBulkLoadTool 批量帶入數據并自動創建索引

需要先創建表:CREATE TABLE IF NOT EXISTS population (state CHAR(2) NOT NULL, city VARCHAR NOT NULL, population BIGINTCONSTRAINT my_pk PRIMARY KEY (state, city));在phoenix 目錄下執行hadoop jar /home/phoenix-4.6.0-HBase-1.0-bin/phoenix-4.6.0-HBase-…

【cloud Alibaba】(三)流量控制、熔斷降級(下)——Sentinel

各位小伙伴們大家好,歡迎來到這個小扎扎的spring cloud專欄,在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Sen…

python gui入門的例子_Python GUI編程之Tkinter入門之道

相信剛學習使用Python進行GUI編程的時候,肯定都會聽過Tkinter,畢竟是standard Python interface to the Tk GUI toolkit.用來寫一些小程序還是很方便的。但如果是剛接觸GUI編程的話肯定是被官方文檔搞的有些懵,畢竟還沒弄清楚套路。之前使用過…

@async 默認線程池_SpringBoot 線程池的使用

Java大聯盟幫助萬千Java學習者持續成長關注作者|Musclehengblog.csdn.net/Muscleheng/article/details/81409672前言最近在做訂單模塊,用戶購買服務類產品之后,需要進行預約,預約成功之后分別給商家和用戶發送提醒短信。考慮發短信…

mysql 橫向擴展 中間件_mysql-proxy數據庫中間件架構 | 架構師之路

一、mysql-proxy簡介mysql-proxy是mysql官方提供的mysql中間件服務,上游可接入若干個mysql-client,后端可連接若干個mysql-server。它使用mysql協議,任何使用mysql-client的上游無需修改任何代碼,即可遷移至mysql-proxy上。mysql-…

python selenium對象怎么序列化_python selenium爬取斗魚

不加延遲報錯selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:”xpath”,”selector”:”.//span[class”DyListCover-hot”]”}(Session info: chrome80.0.3987.122)最開始以為是版本問題,不…

神經網絡的全連接層_深度神經網絡全連接層

一、概念全連接層一般在網絡的最后部分做分類輸出,全連接層的有m個輸入和n個輸出,每一個輸出都和所有的輸入相連,相連的權重w都是不一樣的,同時每一個輸出還有一個bias。二、前向全連接假設輸入是4,輸出是4&#xff0c…

vs 選定內容沒有屬性頁_從智能單品,到全屋智能:2019中國智能家居發展白皮書【附82頁PPT】...

2019年,智能家居行業在技術、市場和行業的變革中迎接新的挑戰和機遇。一方面,AI、IoT、邊緣計算全面賦能智能家居;另一方面,中國的房地產行業正在從上半場的“增量開發”,切換到下半場的“存量經營”、“樓盤精裝化”政…

python決策樹的應用_機器學習-決策樹實戰應用

1.下載2.安裝:雙擊3.創建桌面快捷方式安裝目錄\bin文件夾\:找到gvedit.exe文件右鍵 發送到桌面快捷方式,如下圖:4.配置環境變量將graphviz安裝目錄下的bin文件夾添加到Path環境變量中:5.驗證是否安裝并配置成功進入win…

【SSM面向CRUD編程專欄 3】關于黑馬程序員最全SSM框架教程視頻,P37集老師跳過的模塊創建以及tomcat下載安裝配置和運行等諸多問題

寫在前面:? 本人是在學習B站黑馬程序員SSM框架教程視頻的時候在P37集遇到了問題,如果不解決還沒辦法往下接著聽,老師跳過的模塊創建以及tomcat下載安裝配置和運行等諸多問題,全在這篇博客中得到了解決 😢解決上…

python人臉識別源碼_Python 抖音機器人,讓你找到漂亮小姐姐

本項目作者沉迷于抖音無法自拔,常常花好幾個小時在抖音漂亮小姐姐身上。本著高效、直接地找到漂亮小姐姐的核心思想,我用 Python ADB 做了一個 Python 抖音機器人 Douyin-Bot。特性自動翻頁顏值檢測人臉識別自動點贊自動關注隨機防 Ban自動評論原理打開…