这是我参与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
例题:
- 先创建测试表和数据: 修改默认执行符号(之前默认是分号执行)
- 开启事务并且更改
- 回滚 回滚到了初始状态。 提交(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的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。