mysql笔记10(高级部分--跟数据库管理有关)

news2024/9/30 11:44:51

文章目录

  • 一、视图(view)
    • 1. 作用
    • 2. CRUD--跟表操作几乎相同
      • ① 创建
      • ② 显示视图
      • ③ 查看视图相关详细信息
      • ④ 删除视图
      • ⑤ 更新视图
    • 3. 视图算法
      • ① 创建视图时指定视图算法
      • ② 后期navicat里修改视图算法
      • ③ 注
  • 二、事务(transaction)
    • 1. 事务的提出
    • 2. 举例理解
      • ① commit -- 一起执行
      • ② rollback -- 一起回滚
      • ③ rollback to -- 回滚点
      • ④ 注意
    • 3. ACID -- 事务的四大特性
    • 4. 注意:使用条件
  • 三、索引(index)
    • 1. 概念
    • 2. 优缺点
    • 3. CRUD
      • ① 创建索引
      • ② 更新索引
      • ③ 删除索引
      • ④ 查看
  • 四、存储过程
    • 1. 用途
    • 2. delimiter
    • 3. 举例理解
      • ① 设计存储过程
      • ② 查看存储过程
      • ③ 显示数据库里所有的存储过程
      • ④ 删除存储过程
  • 五、函数
    • 1. number
      • ① 生成一个随机数
      • ② 数据库里抽奖
      • ③ 向上取整
      • ④ 四舍五入
      • ⑤ 向下取整
      • ⑥ 截取数字
      • ⑦ 随机排序
    • 2. string
      • ① 全转换成大写
      • ② 全转换成小写
      • ③ 截取字符串
      • ④ 拼接字符串
        • concat另一个用法
    • 3. 其它函数
      • ① 获取当前时间
      • ② 获取当前时间戳
      • ③ 以年月日形式呈现当前时间
      • ④ 加密函数
      • ⑤ select 配合 if函数 使用
  • 六、内容出处

一、视图(view)

1. 作用

① 视图相当于一个虚拟的表,作用在于筛选,防止无关业务人员看到敏感数据。
② 视图也是在有意地隐藏表结构,说白了还是在隐藏敏感数据。
③ 从某种意义上来说它降低了sql的复杂度,有助于实现快速查询

2. CRUD–跟表操作几乎相同

① 创建

create view 视图名 as select 字段名,字段名 from 表名
例如:
① (普通创建)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        由此可见,vw_stu这个视图就刻意隐藏了学生性别、年龄等信息,班长拿到的可能就是这个视图里的信息(不含身份证号、详细家庭住址等敏感信息),保护学生隐私
        之后查找某个同学的电话时就不需要再写一遍sql语句了,直接在vw_stu这个视图里检索就可以了
② (加入多表查询的内容)
在这里插入图片描述

在这里插入图片描述

② 显示视图

① 在navicat里查看
② 终端用命令查看:show tables;

在这里插入图片描述
        视图名前面应该加一个vw_前缀,从而和普通表进行区分

③ 查看视图相关详细信息

在这里插入图片描述
在这里插入图片描述
显示当前数据库中所有视图的配置信息:
show table status where comment = ‘view’ \G在这里插入图片描述
在这里插入图片描述

④ 删除视图

drop view 视图名;
在这里插入图片描述
在这里插入图片描述

⑤ 更新视图

alter view 视图名 as select 字段名, 字段名 from 表名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
alter view vw_stu_2 drop 字段名;这种写法会报错

3. 视图算法

① merge:合并算法
② temptable:临时表算法

① 创建视图时指定视图算法

create algorithm= view 视图名 as select 字段名,字段名 from 表名;
在这里插入图片描述
在这里插入图片描述

② 后期navicat里修改视图算法

在这里插入图片描述
在这里插入图片描述

③ 注

        网课里提到将子查询语句运用到视图里时,如果发现结果跟预期的不一样,这个跟视图算法有关,将其调整为temptable即可。
        但是下述语句,我在navicat里依次将视图算法调整为undefined、merge、temptable,发现总能运行出正确结果。gpt说这是因为视图算法影响的是查询的执行方式,但不一定会导致语义上的错误。即使视图算法不是temptable,查询优化器仍然能够根据上下文正确解析和执行我们的sql语句。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、事务(transaction)

1. 事务的提出

        淘宝购物时,我们点击立即购买,但是还没付款。此时还没付款的钱在哪里,难道直接更新到了阿里的账户?我们点击付款以后钱去了哪里?点击确认收货之后钱又在哪里,难道我们付完款以后钱就直接到了商家的账户?
        进行转账操作时,我们输入完金额等所有信息以后,会让我们再次确认是否真的要把这些钱转过去,点击确认之后才会真正把钱转给对方。那么点击确认之前的钱在哪?
        可以想一下,难道只是下了个订单就要让我们账户的数据减少,阿里的账户数据增加?那万一过几天我们反悔了呢,难道还要再让阿里的账户数据减少,我们账户的数据增加么?那要是每个人都下一单但是不付款,过几天再退了,服务器不就炸了么?
        因此总要有一个确定性的东西,执行完这个步骤以后再更新数据,我们把这个东西叫作事务。例如:点击确认转账之后,才会真的把钱转过去;点击确认收货之后,钱才会到达商家账户。由此保证了数据的安全性和一致性。事务这个东西要么干脆一块执行,要么回滚
        mysql中最重要的东西,跟钱有关。涉及到钱这种比较严谨的东西的话,一般都会用到事务。

2. 举例理解

情境:接下来会有一个转账的操作(转账跟钱有关,所以一般都比较严谨),一定会有一个确定的操作 – 是否真的要执行转账操作(事务要么一起执行,要么一起回滚掉)
在这里插入图片描述
在这里插入图片描述

① commit – 一起执行

在这里插入图片描述
此时去navicat里刷新一下,发现数据都没变
在这里插入图片描述
此时再刷新,发现钱已经从1号的账户转到了2号的账户

② rollback – 一起回滚

        在公司里遇到跟钱有关的转账操作,一般都会用事务,从而保证资金的准确性。万一哪天服务器崩了,数据到人家账户上了,卖家发货了,但是对面不承认,此时就可以rollback。在这里插入图片描述
navicat里刷新一下,发现数据都没变

③ rollback to – 回滚点

        回滚点就类似于git或者虚拟机里的快照
在这里插入图片描述
在这里插入图片描述
刷新一下可以发现只有四条数据

④ 注意

        只要commit,就不能再rollback。例如:淘宝买东西,我都确认收货了,钱也已经到卖家账户了,此时就不能再反悔让人家退钱了。

3. ACID – 事务的四大特性

① atomicity 原子性:说白了就是不能再分了。事务是一个整体,要么一起执行,要么一起不执行
② consistency 一致性:一旦commit或者rollback,数据库里的数据也要随之改变。事务已经结束,数据也必须达到相应的完整状态
③ isolation 隔离性:每个事务都是相互隔离的,不能说1号和2号进行交易,结果3、4号的数据也被更改了
④ durability 持久性:事务一旦commit,就不可能再更改了,相当于在数据库中永久地写存

4. 注意:使用条件

        在mysql中,只有当建表时把数据库引擎指定为InnoDB,才能使用事务。虽然事务是一个通用的数据库特性,但是在mysql中,其它引擎(例如:MyISAM)不支持事务。

三、索引(index)

1. 概念

mysql中索引的概念以及分类 该文缺点:混淆了唯一键约束和唯一索引的sql语句

① 搜索引擎会用到全文索引。mysql不支持中文索引(解决方案:使用sphinx),但是不知道现在支不支持(dba知道)

2. 优缺点

优点:查询速度快(例如新华字典前面的索引,按拼音、按笔画可以快速找到某个字)
缺点:① 会极大地降低CRUD的效率 ② 占空间

① 有些公司会强制要求将哪些东西设置成索引、哪些东西不能设置成索引
为什么要创建索引?
答:该数据被频繁地搜索(例如:高考总分设置一个普通索引),创建索引可以提高查询效率
③ 一般情况下都是创建一个索引
④ 有时会给公共字段创建索引
注意:如果该表内数据非常少,就没必要创建索引(例如:给性别创建索引就没必要)

3. CRUD

① 创建索引

创建普通索引:create index 索引名 on 表名(字段名);
创建唯一索引:create unique index 索引名 on 表名(字段名);
创建全文索引:create fulltext index 索引名 on 表名(字段名);
创建主键索引:alter table 表名 add primary key(字段名);
注:
① 创建主键约束时会自动创建主键索引,创建唯一键约束时会自动创建唯一索引
② 主键索引只能通过主键约束创建,但是普通索引和唯一索引可以单独创建
③ 设置唯一索引,使用删除唯一键的sql语句后,发现唯一索引随之被删除了
在这里插入图片描述
在这里插入图片描述
设置唯一键约束,使用删除唯一索引的sql语句后,发现唯一键随之被删除了
在这里插入图片描述
在这里插入图片描述
为某张表同一个字段设置唯一索引和设置唯一键约束。这样一来就算删除唯一键约束,也不会对唯一索引产生影响。(唯一键约束和唯一索引的设置顺序以及删除顺序互不影响)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

② 更新索引

alter table 表名 add (unique / fulltext) index 索引名(字段名);
其实相当于新创一个索引,跟 ① 中create语句效果相同
② 主键索引用更新主键约束的sql语句

③ 删除索引

① 普通、全文、唯一索引都这样删:drop index 索引名 on 表名;
② 主键索引用删除主键约束的sql语句

④ 查看

        索引的目的主要是提高查询效率。创建索引后,可以通过select语句利用索引进行检索。通常数据库会自动使用检索来优化查询。
在这里插入图片描述
在这里插入图片描述
        我们可以发现用唯一索引和不用唯一索引查出来数据的顺序不同。
在这里插入图片描述
在这里插入图片描述
        但是对这张表而言,用不用没啥差别,不知道为什么

四、存储过程

1. 用途

        dba用于模块化设计的一个东西,支持CRUD、事务等各种操作,相当于sql里的一个函数

2. delimiter

        mysql中默认以分号作为语句的结尾,例如:show databases; + 回车 就会执行这条语句。但是存储过程里会有很多sql,每次写个分号就直接把命令发送到服务器,那肯定不行啊。因此mysql出了一个delimiter,delimieter //语句执行之后,mysql下面的语句就不以分号结尾了,而是以 // 作为结尾。
在这里插入图片描述
在这里插入图片描述

3. 举例理解

① 设计存储过程

情境:双11了,给每个用户都发一个红包,然后把所有用户的昵称都改成tom。这个操作用视图肯定不行(视图只能查),明显就是存储过程。双11之前,dba先把这个存储过程给写了,到指定时间后,一条命令调用存储过程,然后它就会默认执行之前设计过的所有sql,不需要再一点一点去写了,类似于函数调用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

② 查看存储过程

show create procedure 存储过程名;在这里插入图片描述

③ 显示数据库里所有的存储过程

show procedure status \G
在这里插入图片描述

④ 删除存储过程

drop procedure 存储过程名;
在这里插入图片描述

五、函数

1. number

① 生成一个随机数

select rand();
在这里插入图片描述

② 数据库里抽奖

select * from 表名 order by rand() limit 抽几个人;
在这里插入图片描述
程序员做开发后端时,如果能从数据库的角度去解决问题,就不从service层解决

③ 向上取整

select ceil(数字);
在这里插入图片描述

④ 四舍五入

select round(数字);
在这里插入图片描述

⑤ 向下取整

select floor(数字);
在这里插入图片描述

⑥ 截取数字

select truncate(数字,取几位小数);
在这里插入图片描述

⑦ 随机排序

select * from 表名 order by rand();
在这里插入图片描述

2. string

① 全转换成大写

select ucase(‘字符串’);
在这里插入图片描述

② 全转换成小写

select lcase(‘字符串’);
在这里插入图片描述

③ 截取字符串

从左边从头开始截取:select left(‘字符串’, 取几位);
从右边从头开始截取:select right(‘字符串’, 取几位);
从左边任意位置开始截取:select substring(‘字符串’, 从哪个位置开始截取, 取几位);
在这里插入图片描述

④ 拼接字符串

select concat(‘字符串1’, ‘字符串2’);
在这里插入图片描述

concat另一个用法

select concat(字段名,‘想用什么符号隔开’, 字段名) from student;
在这里插入图片描述

3. 其它函数

① 获取当前时间

select now();
在这里插入图片描述

② 获取当前时间戳

select unix_timestamp();
在这里插入图片描述

③ 以年月日形式呈现当前时间

select year(now()) year, month(now()) month, day(now()) day;
在这里插入图片描述

④ 加密函数

select sha(‘字符串’);
在这里插入图片描述

⑤ select 配合 if函数 使用

参考文章在这里插入图片描述

六、内容出处

mysql

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

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

相关文章

CSS宽度和高度

CSS 尺寸属性指的就是元素的宽度和高度属性,虽然说非常简单,但却是必须掌握的技能。CSS 中提供了 width、height、max-width、min- width、max-height 和 min-height 等几个属性来设置元素的宽度和高度,这些元素使用起来非常简单,…

采购订单管理:如何驱动业务效率和增长

采购订单是一份具有法律约束力的文件,明确了买方在未来特定日期从供应商处购买商品或服务的意图。 该文件对于买卖双方均具有重要价值。对于买方而言,采购订单有助于其进行未来数月的财务规划,明确资金的支出时间点。对于供应商而言&#x…

如何快速建立自己的异地互联的远程视频监控系统,通过web浏览器可以直接查看公网上的监控视频(上)

目录 一、需求 二、方案 2.1、计划方案 2.2、实施准备 2.2.1所需配置的产品和服务 2.2.1.1云主机 (1)选择云平台 (2)配置云服务器 2.2.2.2视频监控平台软件 (1)视频监控平台软件 (2&am…

袋鼠云数据资产平台:数据模型标准化建表重构升级

数据模型是什么?简单来说,数据模型是用来组织和管理数据的一种方式。它为构建高效且可靠的信息系统提供了基础,不仅决定了如何存储和管理数据,还直接影响系统的性能和可扩展性。 想要建立一个良好的数据模型,设计时需…

【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper

文章目录 说明环境搭建创建项目父模块设置子模块 dubbo-api子模块 dubbo-provider子模块 dubbo-consumer测试项目 docker部署项目完整项目地址 说明 jdk1.8SpringBoot2.x低版本dubbo:请查看之前教程【微服务】SpringBootDubboZooKeeper 实战 关于本教程将采用jdk1…

springboot整合Freemarker动态生成JSON

什么是Freemarker 链接: Freemarker介绍和语法 FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的&#xff0c…

node实现大文件切片上传的方法

切片上传定义 文件切片上传,也称为分片上传,是一种处理大文件上传的有效方法。该方法通过将大文件分割成多个较小的部分(即切片或分片),然后分别上传这些切片到服务器,最后在服务器上将这些切片合并成原始文…

新手教学系列——用 VSCode 实现高效远程开发

随着软件开发环境日益复杂,远程开发已成为许多开发者的日常工作方式。尤其当项目需要直接在服务器上运行或本地计算资源有限时,能够使用一款便捷、强大的工具至关重要。在众多 IDE 中,VSCode 因其轻量、灵活且支持丰富插件,成为远程开发的理想选择。本文将详细介绍如何通过…

【Vue3】状态仓库持久化

前言 由于 vuex 和 pinia 是将数据存储到内存中的,所以刷新页面后数据会丢失。如果想要持久化存储,就需要将数据同步到 WebStorage。可以使用现有的插件或者自己手写一个插件,本文对二者均有介绍。 其中手写插件案例使用两个简单模块&#…

【PyTorch】图像目标检测

图像目标检测是什么 Object Detection 判断图像中目标的位置 目标检测两要素 分类:分类向量 [p0, …, pn]回归:回归边界框 [x1, y1, x2, y2] 模型如何完成目标检测 将3D张量映射到两个张量 分类张量:shape为 [N, c1]边界框张量&#xf…

【选择”丹摩“深入探索智谱AI的CogVideoX:视频生成的新前沿】

文章目录 一、CogVideoX模型概述二、变革性的3D变分自编码器三、先进的3D旋转位置编码四、端到端的视频理解模型五、丹摩平台的环境配置简单介绍六、开发者的展望示例代码:与CogVideoX的交互 2024年8月6日,智谱AI宣布其开源视频生成模型CogVideoX&#x…

16、斑马设备的ppocer-4进行文字识别和opencv-mobile中文显示

基本思想:手上有个斑马设备,是客户的,简单记录一下开发过程和工程项目,同时记录跟着android小哥学习了很多anroid的知识,转ppocr-4参考之前的ppocr-3转换即可,整个框架仍然使用c++ ncnn jni框架推理和现实,图像库使用opencv-mobile 一、首先转paddle-cor-4 到ncnn的框架…

E34.【C语言】位段练习题

1.题目 分析下列代码中位段在内存中的排布(已知测试平台为VS2022) struct S {int a : 2;int b : 5;int c : 10;int d : 30; };int main() {struct S s { 0 };return 0; } 有关位段的知识点见64.【C语言】再议结构体(下)文 2.提示 VS满足:由低地址向高地址存储,按浪费空间…

新书推荐——《深度学习精粹与PyTorch实践》

深度学习绝非不可窥探的黑箱!深入理解其模型和算法的实际运作机制,是驾驭并优化结果的关键。你无需成为数学专家或资深数据科学家,同样能够掌握深度学习系统内部的工作原理。 本书旨在通过深入浅出的方式,为你揭示这些原理,让你在理解和解释…

C++系列-继承

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 继承的概念和定义 继承是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行拓展,增加功能,这样可以…

SSL VPN | Easyconnect下载安装使用 (详尽)

EasyConnect是一款远程连接工具,为用户提供简便、快捷的远程访问和控制解决方案。 目录 下载 安装 使用 卸载 下载 通过链接进入官网技术支持板块 深信服技术支持-简单、高效、自助化服务 (sangfor.com.cn)https://support.sangfor.com.cn/ 选择软件下载 在安…

获取本函数所在代码域内的所有局部变量和值以字典形式返回locals()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 获取本函数所在代码域内的 所有局部变量和值 以字典形式返回 locals() 选择题 关于以下代码输出的结果说法正确的是? a 10 def x(): b 20 print(locals()) print("【执行…

二值图像的面积求取的两种方法及MATLAB实现

一、引言 面积在数字图像处理中经常用到,在MATLAB中,计算二值图像的面积通常可以通过两种主要方法实现:遍历法和直接利用bwarea函数。下面将分别介绍这两种方法的原理和相应的MATLAB代码示例。 二、遍历法计算二值图像面积的原理和MATLAB代码…

护眼落地台灯品牌前十名:十大全网超高热度品牌汇总

十大护眼路灯台灯有哪些?在众多照明灯具产品中,护眼落地台灯能够提供适合多场景、大氛围的舒适照明,对于学生、工作群体来说能够有效的提高光线质量,减少不良光线带来的近视风险。可是市场品牌繁多,很容易选购到劣质的…

golang web笔记-2.请求request

什么是request http消息分为request(请求) 和 response(响应) request:在go中是一个struct,代表了客户段发送的http请求,已可以通过request 的方法访问请求中的cookie、URL、User Agent&#xf…