头歌数据库课程实验(索引与数据库完整性)

第1关:创建一般索引

任务描述
本关任务:为 student 表按姓名升序建立索引,索引名为 idx_sname。

相关知识
为了完成本关任务,你需要掌握:

索引是什么;

索引的分类;

索引的创建和删除;

查询索引。

索引是什么
数据库索引是一种提高数据库系统性能的方法。索引能让数据库服务器更快地查找和获取表中指定的行。

例如,为了方便读者快速查找书中的术语,很多书籍在最后附加了索引页,术语按字母排序,同时给出页码。这样读者可以根据术语名,快速获取页码,而不用翻阅整本书。

但是索引也给数据库系统带来了一定的开销,所以我们应该谨慎地使用它们。

索引的分类
索引大体可分为单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引四类。本实训我们主要介绍单例索引和组合索引:

单例索引:一个索引只包含单个列,但一个表中可以有多个单列索引;

普通索引:仅加速查询 最基本的索引,没有任何限制,是我们大多数情况下使用到的索引;
唯一索引:索引列中的值必须是唯一的,但允许为空值;
主键索引:是一种特殊的唯一索引,不允许有空值。
组合索引:在表的多个字段上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

索引的创建和删除
创建索引
创建索引有两种方式,一种是在建表时创建,另一种是建表后创建:

普通索引:
创表时创建普通索引:

CREATE table mytable(
 id INT NOT NULL,
 username VARCHAR(16) NOT NULL,
 INDEX [indexName] (username)
);
建表后创建普通索引:

create INDEX 索引名称 on 表名(字段名 desc/asc);
#或者
ALTER TABLE 表名 ADD INDEX 索引名称 (字段名);
asc 代表升序索引,desc 代表降序,mysql 默认升序索引。

唯一索引:

CREATE UNIQUE INDEX 索引名称 ON 表名(字段名);
#或者
ALTER TABLE 表名 ADD UNIQUE (字段名);
主键索引:主键索引一般在建表时创建,会设为 int 而且是 AUTO_INCREMENT 自增类型的,例如一般表的 id 字段。

CREATE TABLE mytable (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
);
组合索引:组合索引就是在多个字段上创建一个索引。(应用场景:当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度)

CREATE INDEX 索引名称 ON 表名(字段1,字段2,字段3);
#或者
ALTER TABLE 表名 ADD INDEX 索引名称(字段1,字段2,字段3);
查询表中索引
查询索引 SQL:

show index from 表名;
编程要求
在右侧编辑器补充代码,要求如下:

为 student 表按姓名升序建立索引,索引名为 idx_sname。
测试说明
平台会对你编写的代码进行测试,将你所创建的索引都现实出来,具体现实效果请查看右侧测试集。

开始你的任务吧,祝你成功!

 use teachingdb;
create index idx_sname on student(sname);

第2关:删除索引-练习

任务描述
本关任务:删除索引 idx_sname。

相关知识
删除索引
同样,删除索引也有两种方式。

#使用drop删除索引
drop index index_name on table_name ;
#使用alter删除索引
alter table table_name drop index index_name ;
alter table table_name drop primary key ; #删除主键索引
编程要求
根据提示,在右侧编辑器补充代码,删除索引 idx_sname。

测试说明
编写代码后,点击测评即可。

 use teachingdb;drop index idx_sname on student;

第3关:创建联合索引

任务描述
本关任务:创建联合索引 idx_sname_sdept。

相关知识
为了完成本关任务,你需要掌握:如何创建联合索引。

创建联合索引
语法:

create index 索引名称 on 表名(字段名称)
示例:

create index firstIndex on student(id, name, address);
注意:

1.索引名称、表名、字段名称 都不要用引号括起来;

 2.对于联合索引而言,字段名称可以有多个,中间用英文逗号分隔即可;
 3..普通索引数据可以重复。

编程要求
在 student 表 sname 字段和 sdept 字段上创建联合索引 idx_sname_sdept,并将代码补充在右侧编辑器中。

测试说明
编写代码后,点击测评即可。

开始你的任务吧,祝你成功!

 use TeachingDb;
create index idx_sname_sdept on student(sname, sdept);

第4关:创建唯一索引

任务描述
本关任务:创建唯一索引 uk_cname。

相关知识
为了完成本关任务,你需要掌握:如何创建唯一索引。

如何创建唯一索引
语法:

create unique index 索引名称 on 表名(字段名称);
示例:

create unique index secondIndex on student(id, name, address);
注意:

索引名称、表名、字段名称 都不要用引号括起来;
对于联合索引而言,字段名称可以有多个,中间用英文逗号分隔即可;
唯一索引数据不可重复。
编程要求
在 course 表的 cname 字段上创建唯一索引 uk_cname ,并将代码补充在右侧编辑器中。

测试说明
编写代码后,点击测评即可。

开始你的任务吧,祝你成功!

 use TeachingDb;
create unique index uk_cname on course(cname)

第5关:创建前缀索引

任务描述
本关任务:创建4个字符的前缀索引 pf_cname。

相关知识
为了完成本关任务,你需要掌握:如何创建前缀索引。

创建前缀索引
创建前缀索引的两种方式

//1.使用CREATE INDEX语句
CREATE INDEX index_name ON table_name (column_name (length));
//2.使用ALTER TABLE语句
ALTER TABLE table_name ADD INDEX (column_name (length));
编程要求
在 course 表的 cname 字段上创建4个字符的前缀索引 pf_cname,并将代码补充在右侧编辑器中。

测试说明
编写代码后,点击测评即可。

开始你的任务吧,祝你成功!

 use TeachingDb;
create index pf_cname on course(cname(4));

第6关:创建全文索引

任务描述
本关任务:创建全文索引 ft_cname 。

相关知识
为了完成本关任务,你需要掌握:如何创建全文索引。

创建全文索引
创建全文索引的两种方式

//1.ALTER添加
ALTER TABLE table_name ADD FULLTEXT INDEX index_name (column1,column2,...);
//2.CRATE INDEX添加
CREATE FULLTEXT INDEX index_name ON table_name (column1,column2,...);
编程要求
在 course 表的 cname 字段上创建全文索引 ft_cname ,并将代码补充在右侧编辑器中。

测试说明
编写代码后,点击测评即可。

开始你的任务吧,祝你成功!

 use TeachingDb;create fulltext index ft_cname on course(cname)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Socket 编程 UDP

Socket 编程 UDP UDP 网络编程V1 版本 - echo serverV2 版本 - DictServerV3 版本 - 简单聊天室 补充参考内容地址转换函数关于 inet_ntoa UDP 网络编程 声明:下面代码的验证都是用Windows作为客户端的,如果你有两台云服务器可以直接粘贴我在Linux下的客…

c++ 二级指针 vs 指针引用

二级指针 vs 指针引用:深入对比与分析 在C中,二级指针和指针引用都可以用于修改外部指针,但它们在语法、安全性和使用场景上有重要区别。下面我将从多个维度进行详细对比。 1. 基本概念 1.1 二级指针 (Pointer to Pointer) int a 10; in…

【Hive入门】Hive与Spark SQL深度集成:通过Spark ThriftServer高效查询Hive表

目录 引言 1 Spark ThriftServer架构解析 1.1 核心组件与工作原理 1.2 与传统HiveServer2的对比 2 Spark ThriftServer部署指南 2.1 环境准备与启动流程 2.1.1 前置条件检查 2.1.2 服务启动流程 2.2 高可用部署方案 2.2.1 基于ZooKeeper的HA架构 3 性能优化实战 3.…

[面试]SoC验证工程师面试常见问题(二)

SoC验证工程师面试常见问题(二) 摘要:面试SoC验证工程师时,SystemVerilog (SV) 和 UVM (Universal Verification Methodology) 是核心技能,而AXI总线是现代SoC中最常见的接口协议之一,因此也是必考点。以下是可能被问到的问题及优质答案的详细列表: 一、 System…

vue3 css模拟语音通话不同语音、正在加载等的效果

实现效果如下&#xff1a; 在不同的时间&#xff0c;显示不一样的效果&#xff08;大小是一样的&#xff0c;截图时尺寸发生了变化&#xff09; 具体实现代码如下&#xff1a; <script setup> import {ref} from "vue";const max_hight ref(40px) const min…

KeyPresser 一款自动化按键工具

1. 简介 KeyPresser 是一款自动化按键工具,它可以与窗口交互,并支持后台运行, 无需保持被控窗口在前台运行。用户可以选择要操作的目标窗口,并通过勾选复选框来控制要发送哪些按键消息。可以从组合框中选择所需的按键,并在编辑框中输入时间间隔以控制按键发送之间的延迟。程…

ai之paddleOCR 识别PDF python312和paddle版本冲突 GLIBCXX_3.4.30

这里写自定义目录标题 问题一**解决方案****方法 1&#xff1a;使用符号链接将系统库链接到 Conda 环境** **补充说明****验证修复结果** 问题二&#xff1a;**问题根源****解决方案****1. 确认 TensorRT 安装状态****2. 安装 TensorRT 并配置环境变量****3. 验证 TensorRT 与 …

【RabbitMQ】 RabbitMQ快速上手

文章目录 一、RabbitMQ 核心概念1.1 Producer和Consumer2.2 Connection和Channel2.3 Virtual host2.4 Queue2.5 Exchange2.6 RabbitMQ工作流程 二、AMQP协议三 、web界面操作4.1 用户相关操作4.2 虚拟主机相关操作 四、RabbitMQ快速入门4.1 引入依赖4.2 编写生产者代码4.2.1 创…

Beatoven AI 自动生成音乐

Beatoven AI 自动生成音乐 文章目录 Beatoven AI 自动生成音乐一、源代码二、准备工作1. 安装 Python 环境2. 安装依赖库 三、配置 API 密钥四、运行脚本示例一&#xff1a;使用默认参数示例二&#xff1a;生成一段电影预告片风格音乐&#xff08;30秒&#xff09; 五、生成结果…

笔试专题(十四)

文章目录 mari和shiny题解代码 体操队形题解代码 二叉树中的最大路径和题解代码 mari和shiny 题目链接 题解 1. 可以用多状态的线性dp 2. 细节处理&#xff1a;使用long long 存储个数 3. 空间优化&#xff1a;只需要考虑等于’s’&#xff0c;‘sh’&#xff0c;shy’的情况…

LeetCode —— 94. 二叉树的中序遍历

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

conda相关操作

安装torch 直接使用conda install torch1.12.0会报错&#xff0c;因为 Conda 通常使用 pytorch 作为包名&#xff08;而非 torch&#xff09; 正确使用方法&#xff1a; conda install pytorch1.12.0 -c pytorch使用 pip 安装 pip install torch1.12.0在 Conda 中查看可安装…

【Java面试笔记:进阶】26.如何监控和诊断JVM堆内和堆外内存使用?

监控和诊断JVM内存使用是优化性能和解决内存问题的关键。 1.JVM内存监控与诊断方法 1.图形化工具 JConsole:提供图形化界面,可直接连接到Java进程,查看内存使用情况。VisualVM:功能强大的图形化工具,但注意从Oracle JDK 9开始不再包含在JDK安装包中。Java Mission Contr…

AVIOContext 再学习

这个目前阶段用的不多&#xff0c;暂时不要花费太多精力。 url 的格式不同&#xff0c;使用的传输层协议也不同。这块看代码还没看到自己想的这样。 目前看的信息是&#xff1a;avformatContext 的 io_open 回调函数 在默认情况下叫 io_open_default&#xff0c;在解复用的 av…

在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务

引言 随着语音交互技术的发展&#xff0c;如何高效地处理用户的语音输入成为许多应用的重要课题。本文将详细介绍如何在一个Java项目中同时实现&#xff1a; 基于Vosk的本地语音识别&#xff1a;无需调用云端API即可完成语音到文本的转换。本地热点语音内容识别&#xff1a;对…

第15章 对API的身份验证和授权

第15章 对API的身份验证和授权 在构建RESTful API时,确保只有经过身份验证和授权的用户才能访问特定资源是至关重要的。身份验证是确认用户身份的过程,而授权则是决定用户是否有权访问特定资源的过程。在本章中,我们将详细探讨如何在ASP.NET Core Web API中实现身份验证和授…

asp.net客户管理系统批量客户信息上传系统客户跟单系统crm

# crm-150708 客户管理系统批量客户信息上传系统客户跟单系统 # 开发背景 本软件是给郑州某企业管理咨询公司开发的客户管理系统软件 # 功能 1、导入客户数据到系统 2、批量将不同的客户分配给不同的业务员跟进 3、可以对客户数据根据紧急程度标记不同的颜色&#xff0c…

深入理解现代JavaScript:从ES6+语法到Fetch API

引言 JavaScript作为Web开发的基石语言&#xff0c;近年来经历了翻天覆地的变化。ES6(ECMAScript 2015)的发布带来了革命性的新特性&#xff0c;而现代浏览器提供的API也让前端开发变得更加强大和高效。本文将深入探讨ES6核心语法、DOM操作优化技巧以及使用Fetch API进行异步请…

仙盟创梦IDE-智能编程,C#判断数组中是否存在key

一、net4 net core版本 使用LINQ的Contains方法 string[] array { "apple", "banana", "cherry" };string key "banana";bool exists array.Contains(key);if (exists){Console.WriteLine($"数组中存在键 {key}");}else…

360驱动大师v2.0(含网卡版)驱动工具软件下载及安装教程

1.软件名称&#xff1a;360驱动大师 2.软件版本&#xff1a;2.0 3.软件大小&#xff1a;218 MB 4.安装环境&#xff1a;win7/win10/win11 5.下载地址&#xff1a; https://www.kdocs.cn/l/cdZMwizD2ZL1?RL1MvMTM%3D 提示&#xff1a;先转存后下载&#xff0c;防止资源丢失&…