1、视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 2、视图中并不存放数据,而是存放在视图所引用的原始表(基表)中 3、同一张原始表,根据不同用户的不同需求,可以创建不同的视图
1、筛选表中的行 2、防止未经许可的用户访问敏感数据 3、增加数据的兼容性(数据库的字段名发生变化,程序可以不用改字段名) 4、隐藏数据表的结构 5、降低数据库的复杂程度
语法: create view as select 语句; 例如:
语法: alter view 视图名 as select 语句; 例:
语法: drop view [if exists] 视图1, 视图2,...; 例:
方法一: show tables; 显示所有的表和视图
方法二: 视图信息存储在information_schema下的views表中。 查询视图的结构:
找出语文成绩最高的男生和女生: 方法一: 方法二: 可以看到默认走了merge算法。
视图的算法有: 1、合并算法(merge) 将视图语句和外层语句合并后再执行 2、临时表算法(temptable) 将视图作为一个临时表来执行 3、未定义算法(undefined)
查看创建视图的语句: 默认视图创建时为未定义算法。虽然写了undefined,但是一般在视图会使用merge。 方法二更正临时表算法:
1、事务(TRANSACTION)是一个整体,要么一起执行,要么一起不执行。 2、这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行 3、事务是一个不可分割的工作逻辑单元
事务必须具备一下四个属性,简称ACID属性: 1、原子性(Atomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子的);要么都执行,要么都不执行 2、一致性(Consistency):当事务完成时,数据必须处于一致状态 3、隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。 4、永久性(Durability):事务完成后,它对数据库的修改被永久保持。
1、开启事务
start transaction 或者 begin [work]2、提交事务
commit3、回滚事务
rollback例题:
先创建测试表和数据: 修改默认执行符号(之前默认是分号执行) 开启事务并且更改 回滚 回滚到了初始状态。 提交(commit)事务后再回滚就没有用了。4、设置事务的回滚点
5、自动提交事务 每一个sql语句都是一个独立的事务。
6、小结:
1、事务是事务开启的时候开始 2、提交事务、回滚事务后事务都结束 3、只有innodb引擎支持事务 4、一个sql语句就是一个独立的事务,开启事务是将多个sql语句放到一个事务中执行优点: 加快查询速度
缺点: 1、带索引的表在数据库中需要更多的存储空间 2、操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新
适合创建索引的列
1、该列用于频繁搜索 2、该列用于对数据进行排序 3、在where子句中出现的列,在join子句中出现的列请不要使用下面的列创建索引:
1、列中仅包含几个不同的值 2、表中仅包含几行,为小型表创建索引可能不太划算,因为mysql在索引中搜索数据所话的时间在表中1、主键索引:只要创建了主键就会自动的创建主键的索引 2、唯一索引: 只要创建了唯一键就会自动的创建唯一索引: 给表添加的方式,创建唯一索引: 通过修改表创建唯一索引: 3、普通索引 给表添加普通索引 修改普通索引 4、小结
1、创建主键就会创建主键索引 2、创建唯一键就会创建唯一索引 3、创建索引后,数据库根据查询语句自动选择索引语法: drop index 索引名 on 表名
1、获取随机数 场景一:随机选择一名学生 2、四舍五入 3、截取数据 4、取整 向上取整 向下取整
1、大小写转换 2、截取字符串 3、字符串相连 4、coalesce(str1, str2) 如果str1有值就显示str1,如果没有值就显示str2 5、length() 字节长度,char_length() 字符长度
1、时间戳 2、格式化时间戳 3、获取当前时间 4、获取年月日小时分钟秒 5、星期、月份、哪一天 6、日期相减
1、md5() 2、sha()
预编译一次,可以多次执行,用来解决一条sql语句频繁执行的问题 预处理语句:
prepare 预处理名字 from 'sql语句'执行预处理:
execute 预处理名字 [using 变量]1、不带参数的处理 2、带一个参数的预处理
3、小结
1、MySQL中变量以@开头,通过set给变量赋值。 2、?表示一个占位符。在学习的MySQL的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。