原创

重拾-mysql


mysql

语言分类:
 DQL(数据查询) DML(数据操作) DDL(数据定义) TLC(事务控制) DCL(数据控制)

1 1

查询

不建议 select * 

1

模糊查询 like

注意: '_'表示第几个 一个_表示第几个  可以进行转义

1

排序查询 order by(可多排)

 order by
 	sal asc,name asc 第一个 asc起主导,如果第一个相同,再执行第二个asc

1

数据处理函数

单行处理函数 一个输入 一个输出
多行处理函数 多个输入 一个输出
常用方法:
		Lower()转换小写
		upper()转换大写
		substr(被截取的字符串,起始下标(起始为1),截取的长度)
		concat(str,str)进行拼接
		length()取长度
		trim()去空格
		str_to_date()将字符串转换成日期
		date_format()格式化日期
		format()设置千分位
		round(数字,0)四舍五入 字面量 0为整数 -1个数 1小数一位
		rand()生成随机数
		Ifnull可以将null转换成一个具体值

1

substr函数
substr(被截取的字符串,起始下标(起始为1),截取的长度)

1

首字母大写

1

Ifnull函数
注意:null只要参与运算,就是null 可以使用Ifnull(值,0)

1

(case 字段名 when .. then .. when ..then.. end)
不修改数据库,只是显示上调

1

多行数据处理函数(分组)
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:自动忽略 null 值 默认一表一组

1

count(cloum)和count(*)的区别

1

分组函数使用注意:

1

如果有group by 只能查询 分组的字段 或者分组函数

1

典型题:
执行顺序:from, where, group by,select,order by

1

联合分组:一部门 不同工作 最高

1

#####优化策略 分组 where .. group by 和 group by having 第一个只能使用表字段,第二个可以使用分组(多行数据)函数

单表总结

执行顺序

1

去重distinct

注意:只能出现 所有字段的最前方 ,多个字段则联合去重

1

连接查询

内连接
		等值连接
		非等值连接
		自连接
外连接
		左连接
		右连接
全连接

1

笛卡尔现象(无条件查询多表) 避免 应该加条件,起别名
例如:
select a.no,b.tel from stu a,tea b where a.no=b.no

1

等值连接
sql92 和 sql99的区别
sql92:
select a.no,b.tel from stu a,tea b where a.no=b.no

sql99:
select a.no,b.tel from stu a join tea b on a.no=b.no

sql99的优点:表连接是独立的,连接之后,有筛选,写where

1

非等值连接
条件不是一个等值关系

1

自连接
技巧:一张表看成2张表

1

左(右)外连接
 ..left (outer) join .. on..
 例如:
select a.no,b.no from stu a left (outer可省略) join tea b on a.no=b.no
有主次关系 哪个方向就全部查询(null也包括)主表

1

demo:多外连接
	连接方式: 	a连接b,a连接c
from a..
	join
	..b
	on
	..
	left join
	..c
	on

99sql多连接例子:

1

子查询

要的数据里面 嵌套的查询

1

where子查询

1

from子查询

技巧:from 后面select语句当一张表

1

select子查询

注意:select子查询后面的数据只能是1条 否则报错

1

union用法

拼接(减少避免 笛卡儿积)
 or , in ,union
 用于 或者 条件语句

1

union的优点: 10*10*10 1000 可以 100+100 200 减少匹配

1

union的注意事项:
	两个结果集的 列 必须相同

1

limit 用法

语法: limit startIndex,length 
startIndex是启示下标(从0开始),length是长度
注意:limit 在 order by 之后执行!

1

demo练习:

1

分页

	传入 pageNo(第几页) pageSize(每页条数)
  公式  :limit(pageNo-1)*pageSize ,pageSize

1

DQL 总结(select)查询

1

注意

not in 在使用的时候必须排除()里面的null值

快速备份复制表 create table 表民 as select * from 被复制表 (数据也会复制)

约束

1

4大约束 主键约束 primary key ,唯一约束 unique,
外键约束 foreign key ,非空约束 not null

1

表级多个条件约束 不在列
unique(id,age);
列级约束 在列 单个约束
age int(11) unique;

not null 只有列级约束

not null和unique联合使用 直接默认是 主键

主键约束 单一主键 , 复合主键(表级约束)

外键约束 遵循三范式 确保数据有效性,完整性

1

事务

mysql innerdb 引擎 事务记录日志 默认自动提交 
DML语句操作
事务开启 start truncation  提交 commit 回滚 rollback
只能回滚到上一次提交的commit

事务的特性

原子 一致 隔离 持久

1

事务的隔离性

读未提交 读已提交 可重复读 串行化

1 1

索引

索引 b-tree 左小右大

1

实现原理

1

索引使用的场景

1 数据量庞大
2 经常在where 条件后面的 字段
3 很少的DML语句

1

索引的创建和删除

创建 create index 索引名 on 表(字段)
删除 drop index 索引名 on 表
查看是否使用索引 explain 后面跟查询语句

1 1

索引失效

1 减少模糊查询 %开头
2 减少使用or 使用union or必须两边都要有索引才可以 union没有要求
3 使用复合索引 没有使用左边那个索引导致失效 
index(left,right)
4 where 后面的 索引列字段参加了运算 失效 
where sal+1 =8000 
5 索引列使用了函数 失效

1 1 1 1 1

索引分类

普通索引 (一个字段添加使用)
多列索引(复合索引,多个字段使用)
主键索引 
唯一索引(在有unquine 约束的字段使用
越唯一越高效,唯一加索引作用不大

1

视图

视图可以简化sql,利于维护 创建之后可以进行多表的crud ,创建视图必须后面跟DDL语句 视图的增删改查会影响到原表数据


创建视图 create view 视图名 as DDL语句
删除 drop view 视图名 

1

增删改查crud 影响原表数据

1

视图开发的作用

1

DBA命令

1 创建用户
2 授权
3 回收权限
4 导入导出
	导入 mysqldump 表>地址
	导入 source 地址(sql脚本)

1

三范式

1 必须有主键,列不可再分
2 一范式基础之上,非主键完全依赖主键 不可部分依赖
3 二范式基础之上,非主键直接依赖主键 不可传递依赖

1

公式

多对多 3张表 中间表 2外键
一对多 2张表 多的表 加外键
一对一 外键唯一!!
一对一(数据多) 拆分表 加外键加唯一约束!!! 解决 或者 拆分表 同主键策略

1 1

总结

三范式只是理论 为了满足业务 冗余换取执行速度 会降低sql编写难度,有时候适当也是迫不得已.

1

学校
总结
经验
  • 作者:阿杰(联系作者)
  • 发表时间:2022-11-16T15:05:43
  • 版权声明:杰出版
  • 公众号:--无
  • 评论