数据库的约束与索引

数据库的约束与索引

文章目录

  • 数据库的约束与索引
    • 一、约束
      • 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.mzph.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;线程安全是一个至关重要的概念。当多个线程同时访…