【无标题】

where 和 having
① 执行的时机不同:where是在分组之前进行过滤,不参与分组,having是在分组之后进行过滤
② 判断条件不同:where不能对聚合函数进行判断,而having可以

函数

聚合函数:avg,sum,count,max,min
字符串函数:concat 字符串拼接, lower转小写, upper转大写, lpad 左填充, rpad右填充, trim去除字符串首部尾部空格, substring查找子串
数值函数:ceil 向上取整, floor向下取整, mod返回模,rand随机数,round四舍五入保留几位小数
日期函数:curdata。curtime。datediff返回起始日期和结束日期之间的天数,date_add加上一个时间间隔

约束

not null, unique, primary key 主键约束, foreign key外键约束,auto_increment 自动增长

外键约束 更新/修改 行为
no action / restrict 默认行为,当父表删除/更新对应记录,先检查该记录是否有对应外键,如果有,不允许删除
cascade: … 则一并删除/更新 外键在子表中的记录
set null
set default

一对多

一对一:多用于单表拆分,如基础字段和详情字段分开放,以提升操作效率
一对多:在多的一方建立外键,指向’一’的主键
多对多:需要建立一张中间表,中间表包含两个外键,分别指向这两方的主键

连接

内连接:两张表交集部分,
外连接:左外连接,右外连接
自直接:就是把一张表查询多次,自己连接自己(在自连接中,必须为表起别名
交叉连接:cross join 相当于两个表每行都组合在一起,从而得到所有可能组合

事务 ACID

事务是一组操作的集合,一个不可分割的最小单位。事务把所有的操作作为一个整体一起向系统提交或撤销操,这些操作要么同时成功,要么同时失败
过程:① 在业务逻辑执行之前,开启事务 ② 执行完毕提交事务 ③如果执行报错,回滚事务

ACID
原子性:事务是不可分割的最小操作单元
一致性:事务完成,所有的数据状态保持一致
隔离性:保证事务不受外部影响

存储引擎 InnoDB

遵循 ACID模型,支持事务,行级锁,支持外键约束

适用场景:
innodb:支持事务,外键。对事务完整性要求高,在并发条件下要求数据一致性,除了查询,插入外,还有许多更新,删除
MyISAM:读取,插入为主,很少更新/删除操作,对事务完整性,并发性要求不高,如淘宝中足迹,日志数据(这类数据丢几个也没关系
memory:保存在内存,访问速度快,用于临时表和缓存,就是对表大小有限制,太大的无法存在内存中

索引

优点:检索效率提高很多。 降低数据排序成本
缺点:索引占用空间。虽然提高查询效率,但是降低了表的更新速度

聚集索引(仅有一个):数据和索引存在一起,叶子节点保留了该行的数据
二级索引:数据和索引分开存,叶子节点只保留了对应的主键,可以有多个

回表查询:先到二级索引中查询数据,得到主键。再通过主键值去聚集索引中获取整行数据

索引使用规则

最左前缀法则:如果索引了许多列,就是最左边的优先。以最左边为起点,连续的索引都可以匹配,但是如果跳过某一列,则这列之后的索引字段都将失效

索引失效情况

  1. 索引列参与运算会失效
  2. 字符串类型不加引号
  3. like模糊头部匹配,索引失效
  4. 如果MySQL评估全表扫描比用索引快,则不用索引

索引覆盖
查询使用了索引,并且需要返回的列,在这个索引中全部可以找到

索引设计原则:

  1. 对数据量大的,且查询频繁的表建立索引
  2. 常常作为查询条件where,order by,group 操作的字段建立索引

性能分析

  1. 检查频次:可以查看当前数据库update,insert delete等操作的访问次数
    show global/session status
  2. 慢查询日志:记录时间超过指定参数的所有sql语句
  3. profile 可以查看每一条sql的耗时情况
  4. explain:用于得到MySQL如何执行select语句

视图

可以理解为,一条增删改查的语句,视图中的结果就是这条语句的查询结果

作用:

  1. 简单。那些经常被查询的可以直接定义为视图,从而不必每次都得写这一步查询,简化了操作
  2. 安全。数据库可以授权,通过视图用户只能查询修改他们能看见的数据
  3. 数据独立:视图帮助屏蔽真实表结构变化带来的影响
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值