數據庫的約束與索引

數據庫的約束與索引

文章目錄

  • 數據庫的約束與索引
    • 一、約束
      • 1、定義
      • 2、主鍵索引
      • 3、唯一約束
      • 4、非空約束
      • 5、外鍵約束
    • 二、索引
      • 1、定義
      • 2、主鍵索引
      • 3、唯一索引
      • 4、普通索引
      • 5、全文索引
    • 三、深入索引
      • 面試題(一)
      • 面試題(二)
      • 面試題(三)
      • 面試題(四)
      • 面試題(五)

一、約束

1、定義

數據庫的約束是指對數據庫表中的數據施加的一些規則或限制,以確保數據的完整性和一致性。

2、主鍵索引

2.1、 理解:唯一約束+非空約束,該字段上的數據不能重復且不能為null。

2.2、 注意:一張表必須有且只有一個主鍵

2.3、 添加主鍵約束

CREATE TABLE USER(username VARCHAR(32) PRIMARY KEY,PASSWORD VARCHAR(32),nick_name VARCHAR(32),name VARCHAR(32),age INT(3),salary DECIMAL(20,2)
);

2.4、 刪除主鍵約束

ALTER TABLE user DROP PRIMARY KEY;

3、唯一約束

3.1、 定義: 唯一約束是指定table的列或列組合不能重復,保證數據的唯一性

3.2、 理解:該字段上的數據不能重復,但可以為null

3.3、 注意:同一個表可以有多個唯一約束,多個列組合的約束。

在創建唯一約束時,如果不給唯一約束名稱,就默認和列名相同。

唯一約束不僅可以在一個表內創建,而且可以同時多表創建組合唯一約束。

3.4、 創建唯一約束

ALTER TABLE user add UNIQUE(phone);

3.5、 刪除唯一約束

ALTER TABLE user DROP INDEX phone;

4、非空約束

4.1、 理解:該字段上的數據不能為null,但可以重復

4.2、 添加非空約束

ALTER TABLE user MODIFY PASSWORD VARCHAR(32) not NULL;

4.3、 刪除非空約束

ALTER TABLE user MODIFY PASSWORD VARCHAR(32)  NULL;

4.4、 需求:設置password字段為非空字段,設置默認值為’000000’

ALTER TABLE user MODIFY PASSWORD VARCHAR(32) NOT NULL DEFAULT '000000';

5、外鍵約束

5.1、 理解:外鍵約束是保證一個或兩個表之間的參照完整性,外鍵是構建于一個表的兩個字段或是兩個表的兩個字段之間的參照關系

5.2、 創建外鍵約束

ALTER TABLE user ADD FOREIGN KEY(notionality_id) REFERENCES nationality(id);

5.3、 刪除外鍵約束

注意:外鍵名使用SHOW CREATE TABLE user;查看

ALTER TABLE USER DROP FOREIGN KEY user_ibfk_1;

二、索引

1、定義

數據庫索引(Index) 是一種輔助數據結構,存儲在數據庫中,旨在提高數據檢索的速度。索引通常以B樹或哈希表的形式實現。通過創建索引,可以顯著減少數據查找的時間復雜度,從而提升查詢效率。

理解:相當于一本書的目錄,讓查詢變得更快

2、主鍵索引

2.1、 理解:主鍵作為約束,讓該字段上的數據不能為重復且不能為空;主鍵作為索引,讓該字段的數據作為條件查詢更快

2.2、 添加主鍵索引

CREATE TABLE student(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sex VARCHAR(32),age INT(3),salary FLOAT(8,2),course VARCHAR(32)

2.3、 刪除主鍵索引

alter table student drop primary key;

3、唯一索引

3.1、 理解:唯一作為約束,讓該字段上的數據不能重復但可以為null;唯一作為索引,讓該字段的數據作為條件查詢更快

3.2、 創建唯一索引

alter table student add unique(name);

3.3、刪除唯一索引

alter table student drop index name;

4、普通索引

4.1、 理解:普通索引上的數據沒有任何約束,可以重復也可以為null;普通索引讓字段的數據作為條件查詢更快

4.2、 添加普通索引

ALTER TABLE student ADD INDEX(age);

4.3、刪除普通索引

drop index age on student;

5、全文索引

拓展:PARSER ngram - 添加ngram解析器(該解析器可以解析中文、日文、韓文)

5.1、 添加全文索引

ALTER TABLE news ADD FULLTEXT(info) WITH PARSER ngram;

5.2、 利用全文索引去查詢

SELECT * FROM news WHERE MATCH(info) against('胡歌很帥');

5.3、 刪除全文索引

drop index info on news;

三、深入索引

面試題(一)

索引的底層數據結構是什么?索引是如何實現的?

答:索引的底層數據結構是B+tree(多路樹);當設置了字段為索引以后,底層會將字段上的數據使用B+Tree的數據結構存儲在索引文件里

面試題(二)

索引的優缺點?

答:優點:索引字段作為條件查詢更快;

? 缺點:添加、刪除數據會改變表,也會改變索引文件里的數據結構

? 解決方案:少量的添加、刪除就直接忽略,批量添加、刪除之前可以把所有刪除,批量操作后再把所有添加上

面試題(三)

索引的分類?

答:聚簇索引/聚集索引:主鍵索引

? 非聚簇索引/非聚集索引:唯一索引、普通索引、全文索引

面試題(四)

聚簇索引與非聚簇索引的區別?
答: 聚簇索引:葉子節點上存放的是數據行的數據

? 非聚簇索引:葉子節點存放的是數據行的地址(拿到地址后,還要去找地址上的數據)

面試題(五)

索引什么情況下會失效?

答:

– 1、查詢條件中包含or
– 2、like 通配符% 錯誤使用
– 3、聯合索引最左匹配原則
– 4、索引列使用MySQL函數,索引失效
– 5、索引列存在計算,使用(+、-、*、/),索引失效
– 6、使用(!= 或者 < >,not in),導致索引失效
– 7、使用is null, is not null,導致索引失效
– 8、左連接、右連接關聯字段編碼不一致,索引失效
– 9、使用了select ,導致索引失效
– 10、order by使用,導致索引失效
3、聯合索引最左匹配原則
– 4、索引列使用MySQL函數,索引失效
– 5、索引列存在計算,使用(+、-、
、/),索引失效
– 6、使用(!= 或者 < >,not in),導致索引失效
– 7、使用is null, is not null,導致索引失效
– 8、左連接、右連接關聯字段編碼不一致,索引失效
– 9、使用了select *,導致索引失效
– 10、order by使用,導致索引失效
– 11、group by 使用違反最左匹配原則,導致索引失效

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

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

相關文章

【設計模式】行為型-狀態模式

在變幻的時光中&#xff0c;狀態如詩篇般細膩流轉。 文章目錄 一、可調節的燈光二、狀態模式三、狀態模式的核心組件四、運用狀態模式五、狀態模式的應用場景六、小結推薦閱讀 一、可調節的燈光 場景假設&#xff1a;我們有一個電燈&#xff0c;它可以被打開和關閉。用戶可以…

snap和apt的區別簡單了解

Linux中沒有tree命令的時候提示安裝的時候出現了兩個命令&#xff0c;簡單看了看兩者有何區別&#xff08;一般用apt就可以了&#xff09;&#xff1a; sudo snap install tree 和 sudo apt install tree 這兩個命令都是用來安裝 tree 命令行工具的&#xff0c;但它們使用的是不…

在線教育平臺,easyexcel使用案例

控制器 因為如何想要在讀數據的時候操作數據庫&#xff0c;就必須使用構造方法傳dao 或者service&#xff0c;因為這個不歸spring管理&#xff0c;不能自動注入&#xff0c;所以參數里需要傳遞service 或者 dao AutowiredIEduSubjectService subjectService;添加課程分類的方法…

Anaconda學習常見問題匯總

問題1&#xff1a;Fatal error in launcher: Unable to create process using ‘“d:\anaconda\isntall\envs\learn1\python.exe 在進行anaconda學習時&#xff0c;在控制臺輸入&#xff1a;pip list想要查看環境里的內容時發生錯誤&#xff1a; Fatal error in launcher: Un…

個人博客|PHP源碼|支持多國語言切換

一. 前言 今天小編給大家帶來了一款可學習&#xff0c;可商用的&#xff0c;支持多國語言的個人博客網站源碼&#xff0c;支持二開&#xff0c;無加密。此博客相當簡潔&#xff0c;也適合海外。詳細界面和功能見下面視頻演示。 如果您正好有此需求源碼&#xff0c;請聯系小編…

軟件資產管理系統:提升企業軟件資產透明度與合規性的終極解決方案!

在當今數字化轉型浪潮中&#xff0c;企業軟件資產管理的重要性日益凸顯。然而&#xff0c;傳統的手工管理方式往往效率低下&#xff0c;難以應對快速變化的軟件環境。SmartLic軟件資產管理系統應運而生&#xff0c;它以先進的技術手段&#xff0c;為企業提供全面的軟件資產管理…

開源自動化熱鍵映射工具autohotkey十大用法及精選腳本

AutoHotkey&#xff08;AHK&#xff09;是一款功能強大的熱鍵腳本語言工具&#xff0c;它允許用戶通過編寫腳本來自動化鍵盤、鼠標等設備的操作&#xff0c;從而極大地提高工作效率。以下是AutoHotkey的十大經典用法&#xff0c;這些用法不僅解放了用戶的雙手&#xff0c;還展示…

程序化交易廣告及其應用

什么是程序化交易廣告&#xff1f; 程序化交易廣告是以實時競價技術即RTB&#xff08;real-time bidding&#xff09;為核心的廣告交易方式。說到這里&#xff0c;你可能會有疑問&#xff1a;像百度搜索關鍵詞廣告還有百度網盟的廣告&#xff0c;不也是CPC實時競價的嗎&#x…

MDX的魔法:探索SQL Server中的多維表達式

&#x1f4ca; MDX的魔法&#xff1a;探索SQL Server中的多維表達式 在商業智能和數據分析領域&#xff0c;SQL Server提供了一種強大的工具來處理多維數據集&#xff0c;這就是多維表達式&#xff08;Multidimensional Expressions&#xff0c;簡稱MDX&#xff09;。MDX是一種…

論文學習_UVSCAN: Detecting Third-Party Component Usage Violations in IoT Firmware

論文名稱發表時間發表期刊期刊等級研究單位 Understanding the Security Risks Introduced by Third-Party Components in IoT Firmware 2024年IEEE TDSCCCF A佐治亞理工學院 1. 引言 研究背景&#xff1a;物聯網&#xff08;IoT&#xff09;已經無處不在&#xff0c;為我們…

HQChart報價列表高級應用教程7-走勢列數據對接

HQChart報價列表高級應用教程7-走勢列數據對接 走勢列小程序效果圖PC效果圖HQChart代碼地址走勢列類型配置走勢列數據格式示例走勢列 單獨使用一列顯示每個股票的走勢圖 小程序效果圖 PC效果圖 HQChart代碼地址 地址:github.com/jones2000/HQChart 走勢列類型 REPORT_COL…

[工業網絡] 模型建立

普渡大學ICS參考模型 普渡企業參考架構&#xff08;PERA&#xff09;是由西奧多J威廉姆斯&#xff08;Theodore J. Williams&#xff09;和普渡大學計算機集成制造工業大學聯盟的成員在1990年代開發的企業架構參考模型。該模型被ISA-99&#xff08;現為ISA/IEC 62443&#xff…

使用EndNote在Word中插入參考文獻,并編輯參考文獻樣式方法

一、背景 在準備中期報告時&#xff0c;學校給的是Word模板&#xff0c;習慣了Latex排版和添加參考文獻的便利后&#xff0c;真不想用word寫東西。 之前投《機器人》期刊&#xff08;被拒了&#xff09;和準備開題的時候也是用word寫的&#xff0c;當時為方便添加參考文獻和定…

MyBatis 分頁插件 PageHelper 簡介

引言 PageHelper 是一款優秀的開源免費 MyBatis 分頁插件&#xff0c;它極大地簡化了分頁查詢的復雜性&#xff0c;支持多種主流數據庫如 MySQL、Oracle、MariaDB、DB2 等。本文將詳細介紹 PageHelper 的基本使用、配置參數、實現原理以及實際項目中的應用。 一、PageHelper …

Memcached中的CAS操作:確保數據一致性的原子武器

Memcached中的CAS操作&#xff1a;確保數據一致性的原子武器 在分布式緩存系統中&#xff0c;保持數據的一致性是一個重要而復雜的任務。Memcached作為一種高性能的分布式內存緩存系統&#xff0c;提供了一種稱為Compare-And-Swap&#xff08;CAS&#xff09;的操作&#xff0…

解決fastjson自動過濾null值

解決fastjson自動過濾null值 使用 SerializerFeature.WriteNullStringAsEmpty 解決 List<HistoryVector> historyVectors new ArrayList<>();HistoryVector historyVector new HistoryVector();historyVector.setInput("1");historyVector.setReason(&q…

不銹鋼酸退作業區2#冷線氧化鋯分析儀信號傳輸系統的優化

不銹鋼酸退作業區2#冷線氧化鋯分析儀信號傳輸系統的優化 一、項目提出前狀況: (一)不銹鋼酸退作業區2#冷線退火爐煙氣監測系統所使用的設備為橫河氧化鋯分析儀,此設備主要用于檢測退火爐內天然氣燃燒后煙氣成分中的氧含量值,此設備的檢測準確性直接影響產品質量,而且決定…

計算機操作系統部分選填及大題整理

并發和&#xff08; 共享 &#xff09; 是操作系統的兩個最基本的特征,&#xff08; 虛擬 &#xff09;和&#xff08; 異步 &#xff09; 是操作系統的重要特征&#xff0c;并發執行的程序失去可再現性現代操作系統的兩個基本特征是&#xff08;程序的并發執行&#xff09;和資…

萬界星空科技QMS系統:重塑質量管理新紀元

萬界星空科技QMS&#xff08;Quality Management System&#xff09;質量管理系統是一套全面、高效的質量管理工具&#xff0c;旨在幫助企業提升產品質量、優化生產流程、降低質量成本。該系統具備多個具體功能模塊&#xff0c;以下是對其主要功能模塊的詳細介紹&#xff1a; 一…

Java中的線程安全問題及解決方案

Java中的線程安全問題及解決方案 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在多線程編程中&#xff0c;線程安全是一個至關重要的概念。當多個線程同時訪…