首页 > 数据库 >MySQL学习03

MySQL学习03

时间:2023-09-19 21:37:18浏览次数:48  
标签:03 真实 表中 视图 学习 索引 MySQL 数据

一、自动增加字段
设置了自动步长字段,可以不用手动插入值,由系统提供的默认值和默认的步长自动增加,例如学号字段
要求:
1、只有主键才能设置
2、只有数值型字段
3、一张表最多只能设置一个
设置方法:
create table 表名(
字段 类型 primary key auto_increment
);

设置初始值:
    1、通过第一次手动插入数据设置初始值
    2、如果一开始就不提供该字段的数据,则默认从1开始

步长设置:
    1、默认步长是1
    2、set auto_increment_increment = value 设置整个数据库的步长

二、索引
索引是一种提升查询速度的技术,如果把数据库看作一本字典,那么索引就是字典的目录
创建索引;
create table 表名(
....
index 索引名
);
还可以:

alter table 表名 add index [索引名](字段名,....);

什么字段适合添加索引:
    经常出现在select语句的where子句中的字段

查看表中索引
    show index from 表名;
    注意:MySQL会自动对表进行优化,主键、非空且唯一、唯一字段会被自动添加
    索引。

删除索引:
    drop index 索引名 on 表名;

索引的优点:
    1、可以大大地提升数据的查询速度,这就是使用索引最主要的原因
    2、在使用分组、排序语句时,使用索引也可以显著减少时间

索引的缺点:
    1、索引的本质就是一张记录磁盘地址的表,里面存储的是索引字段
    数据所处于的磁盘位置,所以创建索引需要额外的存储空间,是典型
    以空间换时间的做法
    2、当对表中数据进行增加、删除、修改的时候,存储数据的磁盘
    位置发生改变,因此索引表也随之动态变化,这样就降低了数据的维护
    速度

使用索引的建议:
    1、可以在频繁插入、删除、修改数据的时候,把索引删除,然后维护数据、
    维护结束后,重新创建索引,提升查询速度
    2、理论上,可以为所有字段分别创建索引,但是不建议这样做,并且MySQL中
    一张表的索引总数限制16个

MySQL索引底层实现通过 B+树、哈希查找实现

三、视图
视图特点:
1、MySQL中的视图(View)是一种虚拟存在的表,同真实表一样,视图也是由行、列
组成,但是视图不真实存在于数据库中
2、数据库中只存放视图的定义,不存放视图中的数据,视图中的数据全部来自于视图
引用的真实表中
3、使用视图查询数据时,数据库会从对应的真实表中查询数据,因此视图中的数据依赖
于真实表中的数据,一旦真实表中的数据发生了改变,显示到视图中的数据也随之改变,
对视图中的数据可以进行insert\updata\delete操作,并且也会反映到真实表中
4、视图不能改变表结构,并且当真实表结构发生改变时,应该先删除原视图,再重建
后才能使用
5、视图的数量没有限制,但是视图名不能重复,也不能与真实表重名
6、视图可以嵌套
7、视图的字段不能创建索引

创建视图:
create view 视图名[字段,...] as <select 语句>;
注意:select语句的where子句的影响,既影响了创建时真实图中可以出现在视图
中的数据,其次,在后续对视图数据修改时,也会持续影响视图的显示,但是依然
会对真实表发生修改
    create view s1(id,name,sex) as select id,name,sex from student where id < 4;
    //s1中只显示id < 4的数据
    insert into s1 

查看视图字段
desc 视图名;

查看视图数据
select 字段名 from 视图名;

删除视图
drop view 视图名;

视图的作用:
    1、让一些操作变的简单,可以对经常使用的字段,定义一个视图,这样就无须每次都
    指定字段名
    2、增加数据的安全性、通过视图,用户只能查询、修改指定的字段
    3、提高表的逻辑独立性,让视图屏蔽真实表结构变化带来的影响

    总结:使用视图的绝大部分原因是为了保障数据的安全性、提高查询的便捷性
缺点:
    1、速度慢
    2、理论上使用视图可以与真实表一样使用,例如增删改查数据实际上是在操作
    真实表,但是一般会对视图加以一定的限制,导致对视图数据的修改受到限制,
    没有真实图来的自由
    3、因此视图一般用作查询数据使用

标签:03,真实,表中,视图,学习,索引,MySQL,数据
From: https://www.cnblogs.com/c-learnmore/p/17715850.html

相关文章

  • Go项目学习(2)-viper
    前言GitHub地址Api地址详细教程可直接参考Github,已经很详细了,这里只进行简单入门知识总结。介绍用来获取配置,配置可来自flag、环境变量、配置文件、远程配置……获取配置的优先级:Set,flag,env,config,key/valuestroe,default。配置项的值可以直接通过Viper中一系列get函数获取,......
  • 每日学习之phoenix快速入门
    1.建表语句createtableifnotexists表名(ROWKEY名称数据类型primarykey,列簇名.列名1数据类型NOTNULL,列簇名.列名2数据类型NOTNULL,列簇名.列名3数据类型,列簇名.列名4数据类型);2.删除表droptableifexists表名;3.插入数据up......
  • centos 7 彻底删除mysql5.7 与 mysql5.7 rpm安装
    准备工作1.下载msyql5.7的安装包,mysql-5.7.36-1.el7.x86_64.rpm-bundle.tarsystemctlstopmysqld//关闭msyql服务2.查看是否有安装的mysql,删除安装的mysqlrpm-qa|grep-imysql//查看使用rpm安装了哪些包3.卸载安装的包,逐个删除查到了rpm包rpm-e--nodeps......
  • 深入解析 MySQL 中的字符串处理函数:RIGHT()、LEFT() 和 CHAR_LENGTH
    在MySQL数据库中,字符串处理是一个常见的任务,特别是当你需要从字符串中提取特定部分或者计算字符串的长度时。我们在之前的博文中已经介绍过SUBSTRING_INDEX()、SUBSTRING_INDEX()、SUBSTRING_INDEX(),感兴趣的朋友了可以翻一下我们之前的博文;在本文中,我们将深入探讨三个重要的字......
  • redis和mysql的区别以及它们是如何配合使用的
    redis和mysql的区别:1、从类型上来说,mysql是关系型数据库,redis是缓存数据库。2、mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。3、mysql和redis因为需求的不同,一般都是配合使用。mysql和redis的数据库类型,m......
  • 《信息安全系统设计与实现》第三周学习笔记
    《信息安全系统设计与实现》第三周学习笔记一门程序设计语言具有以下必备的要素和技能:语法:程序设计语言需要定义一套语法规则,以确定如何组织和编写代码。这包括变量声明、控制流语句(如条件语句和循环语句)、函数定义等。数据类型:语言需要支持不同的数据类型,如整数、浮点数、......
  • K8s部署Nacos 2.0.3集群模式(外置mysql数据库)
    来源:https://www.woniusnail.com/?p=1691Nacos 具体介绍就不介绍了,详细的官方都有。本次主要介绍在k8s集群中部署Nacos集群(3节点),数据库使用外置的mysql,相比使用官方的在k8s内创建数据库的方案维护更方便,所有nacos配置全部保存在数据库中,不用担心重启掉线等异常导致配置文......
  • 03密码学基础:如何让你的密码变得“不可见”?
    非对称加密和对称加密算法的最大区别就是加密和解密使用的密钥是不同的对称加密具备较高的安全性和性能在一对多的场景中(如多人登录服务器),存在密钥分发难题的时候,要使用非对称加密不需要可逆计算的时候(如存储密码),可以使用散列算法对称加密用AES-CTR(CTR分组计算模式)、非对称加......
  • MySQL高级10-InnoDB引擎存储架构
    一、逻辑存储结构表空间(Tablespace):一个mysql实例,及一个数据库实例,可以对应多个表空间(ibd文件),用于存储记录,索引等数据。段(Segment):分为数据段(Leafnodesegment)、索引段(Non-leafnodesegment)、回滚段(Rollbacksegment),InnoDB是索引组织表,数据段就是B+树......
  • mysql逗号分隔的字符串转换为行
      SELECTa.id,substring_index(substring_index(a.code,',',b.help_topic_id+1),',',-1)age,a.yearFROMtaJOINmysql.help_topicbONb.help_topic_id<(length(a.code)-length(REPLACE(a.code,',','......