Mysql-索引视图

news2024/9/23 11:19:03

目录

1.视图

1.1什么是视图

1.2为什么需要视图

1.3视图的作用和优点

1.4创建视图

1.5更新视图

1.6视图使用规则

1.7修改视图

1.8删除视图

2.索引

2.1什么是索引

2.2索引特点

2.3索引分类

2.4索引优缺点 

2.5创建索引

2.6查看索引

2.7删除索引


1.视图

1.1什么是视图

MySQL中的视图(view)是一种虚拟表,其内容由查询定义,视图本身并不包含数据。
视图看起来和真实的表完全相同,但其中的数据来自定义视图时用到的基本表,并且在打开视图时动态生成,类似对常用的复杂多表连接查询的结果截图拍照,之后需要用到时只需看一下视图即可无需重新查询,以节省资源
视图是一种数据库对象,其内没有存储任何数据,它只是对表的一个查询

1.2为什么需要视图

例如经常要对student和score表进行连接查询,每次都要做表的连接,写同样的一串语句,同时由于成绩数据比较敏感,对外要求不可见。对这样的问题就可以通过视图来解决。

1.3视图的作用和优点

作用:
        控制安全

        保存查询数据
优点:
        简化操作:通过视图可以使用户将注意力集中在他所关心的数据上。使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。
        提高数据的安全性:在设计数据库时可以针对不同的用户定义不同的视图,使用视图的用户只能访问他们被允许查询的结果集。
        数据独立:视图的结构定义好之后,如果增加新的关系或对原有的关系增加新的字段对用户访问的数据都不会造成影响。

1.4创建视图

create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]
# 说明:
1、or replace:如果要创建的视图名称已存在,则替换已有视图。
2、algorithm:可选参数,表示视图选择的算法,默认算法是 undefined
(1)undefined:未定义指定算法
(2)merge:更新视图表数据的同时会更新真实表的数据
(3)temptable:只能查询不能更新
3、view_name:新建的视图名称。
4、column_list:可选,表示视图的字段列表。若省略,则使用 select 语句中的字段列表。
5、as select_statement:创建视图的 select 语句。
6、with check option:表示更新视图时要保证该视图的 where 子句为真。
比如定义视图:create view v1 as select * from salary > 5000;
如果要更新视图,则必须保证 salary 字段的值在 5000 以上,否则报错。
(1)cascaded:必须满足所有针对该视图的条件才可以更新
(2)local:只需满足本视图的条件就可以更新

 1.创建来源一张表的视图

mysql> show databases;
mysql> use mydb9_stusys;
mysql> create view v_student as select sno,sname,ssex,year(now())-year(birth) as
age from student;
mysql> select * from v_student;
mysql> show tables;

2.创建多表连接的视图

mysql> create view v_score as select student.*, score from student join sc on
student.sno = sc.sno;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from v_score;
mysql> show tables;
mysql> show create view v_score;

3.创建视图,字段起别名

mysql> create or replace view v_avg(sex,avg_score) as select ssex ,
round(avg(score),2) from student inner join sc on student.sno=sc.sno group by
ssex;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from v_avg;
+------+-----------+
| sex  | avg_score |
+------+-----------+
| 女   |   73.52   |
| 男   |   78.51   |
+------+-----------+

1.5更新视图

以下视图不可更新
包含以下关键字的 SQL 语句:

        聚合函数、distinct、group by 、having、union 或 uinon all
        select 中包含子查询
        from 一个不可更新的试图
        where 子句的子查询引用了 from 子句中的表。 

1.创建视图,限制更新

mysql> create or replace view v_age as select sno,sname,ssex,sage from student
where sage>20 with check option; # 增加限制更新参数
Query OK, 0 rows affected (0.00 sec)

mysql> select * from v_age;
mysql> update v_age set sage = 24 where sno = 's011'; # 更新视图,24符合条件
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from student; # 查看视图的基本表,数据已经变更


# 若更新时条件不符合where字句则限制更新
mysql> update v_age set sage = 18 where sno = 's011'; # 18岁不符合where子句
ERROR 1369 (HY000): CHECK OPTION failed 'mydb9_stusys.v_age'


mysql> select * from v_student;
mysql> update v_student set age=30 where sno="s001";
ERROR 1348 (HY000): Column 'age' is not updatable

1.6视图使用规则

视图必须有唯一命名
在mysql中视图的数量没有限制
创建视图必须从管理员那里获得必要的权限
视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图
在视图中可以使用order by,但是如果视图内已经使用该排序子句,则视图的order by将覆盖前面的order by。
视图不能索引,也不能关联触发器或默认值
视图可以和表同时使用

1.7修改视图

mysql> desc v_student; # 查看结构

mysql> create or replace view v_student as select sno, sname, ssex, sage from
student; # 将age直接读取

mysql> alter view v_student as select sno, sname, ssex, sage from student where
ssex="女";
Query OK, 0 rows affected (0.02 sec)

mysql> select * from v_student;

1.8删除视图

drop view [if  exists] view_name;

2.索引

2.1什么是索引

索引是一种特殊的文件,用来快速查询数据库表中的特定记录,是提高数据库性能的重要方式
通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度

2.2索引特点

索引是存放在模式(schema)中的一个数据库对象
索引在数据库中用来加速对表的查询
通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O
索引与表独立存放,但不能独立存在,必须属于某个表

2.3索引分类

按装算法分类:Hash索引和B+Tree索引

 

按照功能分类 

2.4索引优缺点 

优点
        索引可以提高检索数据的速度,这也是创建索引的最主要的原因
        对于有依赖关系的子表和父表之间的联合查询时,可以提高查询速度
        使用分组和排序子句进行数据查询时,同样可以显著节省查询中分组和排序的时间。
缺点
        创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加
        每一个索引要占一定的磁盘存储空间
        增加、删除和修改数据时,要动态的维护索引,会降低数据的维护速度

2.5创建索引

# 语法1
create table 表名 (
    字段名1 数据类型 [完整性约束条件…],
    字段名2 数据类型 [完整性约束条件…],
    [unique | fulltext | spatial] index | key
    [索引名] (字段名[(长度)] [asc | desc])
    );


# 语法2
create [unique | fulltext | spatial] index 索引名
ON 表名 ( 字段名[(长度)] [asc | desc] );


# 语法3
alter table 表名 add [unique | fulltext | spatial] index
索引名 (字段名[(长度)] [asc | desc]);

示例:

# 创建表的同时创建普通索引
mysql> create table index1_tb( id int, name varchar(20), sex boolean, index(id));

# 创建表的同时创建唯一索引
mysql> create table index2_tb( id int unique, name varchar(20), unique index
index2(id asc) );

# 创建单列索引 (即普通的单列索引)
mysql> create table index3_tb( id int, subject varchar(30), index
index3(subject(10)) );

# 创建多列索引 (即普通的多列索引)
# 注意:使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。
mysql> create table index4_tb( id int, name varchar(20), sex char(4), index
index4(name,sex) );

2.6查看索引

# 查询索引
show create table 表名 \G
# 查询某张表中索引情况
show index from table_name;
# 使用计划查询SQL使用索引情况
explain select * from 表名 where id=1 \G
# 使用系统表查看所有索引
select * from mysql.`innodb_index_stats` a where a.`database_name` = '数据库名’;
# 使用系统表查看单张表的所有索引
select * from mysql.`innodb_index_stats` a where a.`database_name` = '数据库名' and
a.table_name like '%表名%’;

示例:

mysql> show create table index1_tb \G
mysql> show index from index3_tb;
mysql> explain select * from index1_tb where id=1 \G
# 注意possible_keys和key 这两个属性,possible_keys:MySQL在搜索数据记录时可以选用的各个索引,
key:实际选用的索引

2.7删除索引

drop index 索引名 on 表名

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

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

相关文章

[Javascript】前端面试基础3【每日学习并更新10】

Web开发中会话跟踪的方法有那些 cookiesessionurl重写隐藏inputip地址 JS基本数据类型 String:用于表示文本数据。Number:用于表示数值,包括整数和浮点数。BigInt:用于表示任意精度的整数。Boolean:用于表示逻辑值…

流量录制与回放:jvm-sandbox-repeater工具详解

在软件开发和测试过程中,流量录制与回放是一个非常重要的环节,它可以帮助开发者验证系统在特定条件下的行为是否符合预期。本文将详细介绍一款强大的流量录制回放工具——jvm-sandbox-repeater,以及如何利用它来提高软件测试的效率和质量。 …

linux进程——解析命令行参数——环境变量详解

前言:本节内容还是linux进程, 主要讲解里面的环境变量——我们首先要知道的就是环境变量其实就是操作系统维护的一组kv值, 环境变量是系统提供的一组 变量名变量值 形式的变量。不同的环境变量之间具有不同的用途, 并且具有全局属…

刷机维修进阶教程-----何谓“tee损坏” 指纹丢失 掉帧 传感器失效?详细修复步骤教程

TEE损坏指的是安卓机型中Key Attestation密钥认证所依赖的可信应用中的证书库被破坏了。然后拒绝为指纹密匙认证提供服务。加密的密匙由TEE负责管理。tee损坏只影响当前机型的密匙认证。不影响加密。通俗的理解。如果你机型维修或者刷机或者解锁或者格机 全檫除分区等等后有异常…

Python自然语言处理库之NLTK与spaCy使用详解

概要 自然语言处理(NLP)是人工智能和数据科学领域的重要分支,致力于让计算机理解、解释和生成人类语言。在Python中,NLTK(Natural Language Toolkit)和spaCy是两个广泛使用的NLP库。本文将详细介绍NLTK和spaCy的特点、功能及其使用方法,并通过具体示例展示如何使用这两…

押金原路退回,手机版一键操作秒到账,无需设备收银设备

传统收银 1.操作不熟练:对收银系统的功能和操作不熟悉,可能导致收银过程较长,顾客等待时间增加。 2无法适应新技术:对于一些新的支付方式或技术,不能自主学 3操作不熟练:鼠标使用不熟练,对收…

element DatePicker 日期选择器,只选择月,月份数据从0开始(0月31日),而不是从1开始,JavaScript的原因,如下为解决办法

<el-date-pickerv-model"queryParam.yuedTime"type"month"placeholder"选择月"change"handleMonthChange"></el-date-picker> 方式一&#xff1a;在前端处理 change"handleMonthChange" &#xff0c;增加此方…

PostgreSQL的学习心得和知识总结(一百四十九)|psql 的使用技巧:设置、预设、回显和已保存的查询

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

nms概念

nms基本概念&#xff1a;非极大值抑制 用途&#xff1a;在做目标检测的时候&#xff0c;往往会生成很多很多候选框&#xff0c;在做目标检测的时候&#xff0c;往往会生成很多很多候选框。 处理流程&#xff1a; 1.对某一类按score对候选框进行排序&#xff0c;并选出score最…

ffmpeg把pcm封装为wav

note 1.wav格式中&#xff0c;音频数据未经过压缩&#xff0c;直接封装即可 2.对于编码器的选择&#xff0c;应选择和pcm裸数据一致的编码器(本次实际不须编码) version #define LIBSWRESAMPLE_VERSION_MAJOR 2 #define LIBSWRESAMPLE_VERSION_MINOR 9 #define LIBSWRESAM…

Python网络爬虫详解:实战豆瓣电影信息采集

文章目录 前言一、爬虫是什么&#xff1f;二、常用库及其作用1.Requests2.BeautifulSoup3. lxml4. Scrapy5. Selenium6. PyQuery7. Pandas8. JSON9. Time 三、实现步骤步骤一&#xff1a;环境准备步骤二&#xff1a;数据采集步骤三&#xff1a;数据处理步骤四&#xff1a;数据存…

【数据分享】2008-2022年我国省市县三级的逐日NO2数据(excel\shp格式)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年的省市县三级的逐日PM2.5数据、2013-2022年的省市县三级的逐日CO数据和2013-2022年的省市县三级的逐日SO2数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次…

前端 SSE 长连接

使用 const options {withCredentials: true, // 默认 false}const eventSource new EventSource(/api, options);eventSource.addEventListener(open, () > {});eventSource.onmessage (event) > {}; // 或addEventListener(message,callback)eventSource.addEvent…

BGP选路之AS-PATH

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。首先要比较的属性是 Preferred Value&#xff0c;然后是Local Preference&#xff0c;再次是路由生成方式&a…

Ansible的脚本-----playbook剧本【上】

目录 1.playbook剧本组成 2.playbook剧本实战演练 2.1 实战演练一&#xff1a;给被管理主机安装httpd服务 2.2 实战演练二&#xff1a;定义、引用变量 2.3 实战演练三&#xff1a;指定远程主机sudo切换用户 2.4 实战演练四&#xff1a;when条件判断 2.5 实战演练五&…

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测试够用了,生…

【C#】visual studio打包winForm(依赖DLL)为安装程序exe

0.简介 IDE&#xff1a;VS2022 平台&#xff1a;C# .NetFramework4.7 WinForm界面 有GDAL、EEplus库的依赖&#xff0c;所以在其他未安装环境的电脑中功能无法使用。 1. 安装 1.1 运行文件 在VS扩展中选择管理扩展&#xff0c;Microsoft Visual Studio Installer Projects …

C#测试控制台程序调用Quartz.NET的基本用法

Quartz.Net是常用的任务调用框架之一&#xff0c;既能在客户端程序中使用&#xff0c;也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。   VS2022新建控制台项目&#xff0c;在Nuget包管理器中搜索并安装Quartz包&#xff0c;如下所…

51单片机嵌入式开发:18、STC89C52RC嵌入式DS1302实时时钟实验及数码管显示

STC89C52RC嵌入式DS1302实时时钟实验及数码管显示 STC89C52RC嵌入式DS1302实时时钟实验及数码管显示1 概述1.1 DS1302简介1.2 DS1302功能和特点1.3 DS1302工作原理1.4 DS1302应用领域 2 DS1302设计原理2.1 引脚说明2.2 寄存器说明及使用&#xff08;1&#xff09;命令cmd字节说…

Redis的缓存问题:缓存穿透、缓存击穿和缓存雪崩

目录 一、缓存穿透 1、问题描述 2、解决方案 二、缓存击穿 1、问题描述 2、解决方案 三、缓存雪崩 1、问题描述 2、解决方案 3、雪崩案例 一、缓存穿透 1、问题描述 缓存穿透指的是⼤量请求的 key根本不存在于缓存中&#xff0c;每次针对此key的请求从缓存获取不到…