Mysql视图、事务、索引、函数、预处理

747 阅读5分钟

这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战

一、视图

1.1 概述

1、视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 2、视图中并不存放数据,而是存放在视图所引用的原始表(基表)中 3、同一张原始表,根据不同用户的不同需求,可以创建不同的视图

1.2 作用

1、筛选表中的行 2、防止未经许可的用户访问敏感数据 3、增加数据的兼容性(数据库的字段名发生变化,程序可以不用改字段名) 4、隐藏数据表的结构 5、降低数据库的复杂程度

1.3 创建视图

语法: create view as select 语句; 例如: 在这里插入图片描述

1.4 修改视图

语法: alter view 视图名 as select 语句; 例: 在这里插入图片描述

1.5 删除视图

语法: drop view [if exists] 视图1, 视图2,...; 例: 在这里插入图片描述 在这里插入图片描述

1.6 查看视图信息

方法一: show tables; 显示所有的表和视图

方法二: 视图信息存储在information_schema下的views表中。 在这里插入图片描述 查询视图的结构: 在这里插入图片描述

1.7 视图算法

找出语文成绩最高的男生和女生: 方法一: 在这里插入图片描述 方法二: 在这里插入图片描述 可以看到默认走了merge算法。

视图的算法有:

1、合并算法(merge) 将视图语句和外层语句合并后再执行

2、临时表算法(temptable)

将视图作为一个临时表来执行 3、未定义算法(undefined)

查看创建视图的语句: 在这里插入图片描述 默认视图创建时为未定义算法。虽然写了undefined,但是一般在视图会使用merge。 方法二更正临时表算法: 在这里插入图片描述

二、事务

2.1 概述

1、事务(TRANSACTION)是一个整体,要么一起执行,要么一起不执行。 2、这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行 3、事务是一个不可分割的工作逻辑单元

2.2 事务特性

事务必须具备一下四个属性,简称ACID属性: 1、原子性(Atomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子的);要么都执行,要么都不执行 2、一致性(Consistency):当事务完成时,数据必须处于一致状态 3、隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。 4、永久性(Durability):事务完成后,它对数据库的修改被永久保持。

2.3 事务处理

1、开启事务

start  transaction  或者  begin [work]

2、提交事务

commit

3、回滚事务

rollback

例题:

  1. 先创建测试表和数据: 在这里插入图片描述 修改默认执行符号(之前默认是分号执行)

在这里插入图片描述

  1. 开启事务并且更改 在这里插入图片描述
  2. 回滚 在这里插入图片描述 回滚到了初始状态。 在这里插入图片描述 提交(commit)事务后再回滚就没有用了。

4、设置事务的回滚点 在这里插入图片描述

5、自动提交事务 每一个sql语句都是一个独立的事务。 在这里插入图片描述

6、小结:

1、事务是事务开启的时候开始
2、提交事务、回滚事务后事务都结束
3、只有innodb引擎支持事务
4、一个sql语句就是一个独立的事务,开启事务是将多个sql语句放到一个事务中执行

三、索引

3.1 概述

优点: 加快查询速度

缺点: 1、带索引的表在数据库中需要更多的存储空间 2、操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新

3.2 创建索引的指导原则

适合创建索引的列

	1、该列用于频繁搜索
	2、该列用于对数据进行排序
	3、在where子句中出现的列,在join子句中出现的列

请不要使用下面的列创建索引:

	1、列中仅包含几个不同的值
	2、表中仅包含几行,为小型表创建索引可能不太划算,因为mysql在索引中搜索数据所话的时间在表中

3.3 创建索引

1、主键索引:只要创建了主键就会自动的创建主键的索引 2、唯一索引: 只要创建了唯一键就会自动的创建唯一索引: 还可以通过如下创建唯一索引: 给表添加的方式,创建唯一索引: 在这里插入图片描述 在这里插入图片描述 通过修改表创建唯一索引: 在这里插入图片描述 3、普通索引 在这里插入图片描述 给表添加普通索引 在这里插入图片描述 修改普通索引 在这里插入图片描述 4、小结

1、创建主键就会创建主键索引
2、创建唯一键就会创建唯一索引
3、创建索引后,数据库根据查询语句自动选择索引

3.4 删除索引

语法: drop index 索引名 on 表名 在这里插入图片描述

四、函数

4.1 数字类

1、获取随机数

在这里插入图片描述

场景一:随机选择一名学生 在这里插入图片描述 2、四舍五入

在这里插入图片描述

3、截取数据 在这里插入图片描述 4、取整 向上取整

在这里插入图片描述

向下取整

在这里插入图片描述

4.2 字符串类

1、大小写转换 在这里插入图片描述 2、截取字符串 在这里插入图片描述 3、字符串相连 在这里插入图片描述 在这里插入图片描述

4、coalesce(str1, str2) 如果str1有值就显示str1,如果没有值就显示str2 在这里插入图片描述 5、length() 字节长度,char_length() 字符长度 在这里插入图片描述

4.3 时间类

1、时间戳

在这里插入图片描述

2、格式化时间戳

在这里插入图片描述

3、获取当前时间

在这里插入图片描述

4、获取年月日小时分钟秒 在这里插入图片描述 5、星期、月份、哪一天 在这里插入图片描述 6、日期相减

在这里插入图片描述

4.4 加密函数

1、md5()

在这里插入图片描述

2、sha()

在这里插入图片描述

五、预处理

预编译一次,可以多次执行,用来解决一条sql语句频繁执行的问题 预处理语句:

prepare 预处理名字 from 'sql语句'

执行预处理:

execute 预处理名字 [using 变量]

1、不带参数的处理 在这里插入图片描述 2、带一个参数的预处理 在这里插入图片描述

3、小结

	1、MySQL中变量以@开头,通过set给变量赋值。
	2、?表示一个占位符。

在学习的MySQL的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。