mysql必知必会笔记

【mysql必知必会笔记】title: mysql必知必会笔记
date: 2020-01-13 20:39:13
categories: 数据库
tags:
- mysql
description: 之前mysql学的有点零散,边用边学,重看一边《必知必会》,查缺补漏

  1. 模糊匹配like和正则匹配regexp的区别:
    Like匹配整个列,也就是说需要这个列的所有内容匹配,而regexp是列值内进行匹配,如果正则在列值中出现,就会匹配到,比如 test1000 ,如果用like '1000'则无法找到,但使用regexp '1000'就能匹配到。
  2. 使用通配符的技巧
    • 不要过度使用通配符
    • 如果必须要使用,则尽量将通配符放到搜索模式的后面
  3. 为什么要使用in,虽然其他如or等可以替代in?
    • in在某些场景更加简洁直观
    • in操作符比OR操作符更快?
    • in的最大优点是可以包含其他selelct语句,使得能够动态的建立where子句
  4. 函数没有SQL的可移植性强,不赞成使用特殊实现的功能。
  5. 在使用group by可以使用with rollup,来对分组后做一个汇总
  6. 几乎所有的where子句都可以用having子句来替代,唯一的区别是where过滤行,而having过滤分组,且having子句放在分组后,而where过滤放在分组前。
  7. 在联结中应该首选inner join语法
  8. union all 可以不取消重复的行
  9. on语法是专门为外连接设计出来的,它的目的是过滤被驱动表中的数据,对驱动表没有影响,如果是内连接,则效果跟where是一样的。左外连接时,左边的是驱动表,右外连接时,右边是驱动表。
  10. update和delete语句是危险操作,需要限制全局修改或删除
  11. 引擎的区别:
    • MyISAM引擎性能高,支持全文本搜索,但不支持事物
    • InnoDB支持事物,不支持全文本搜素,默认引擎
    • MEMEORY是内存库,非常快适用于临时表.
  12. 为什么使用视图?视图将一些sql查询包装成一个通用的虚拟表。
    • 重用sql语句
    • 简化复杂的sql操作,编写查询后,可以方便的重用它而不必知道它的基本查询细节
    • 使用表的组成部分而不是整个表
    • 保护数据,可以给用户授予特定部分的访问权限而不是整个
    • 更改数据格式和表示。
  13. 为什么要使用存储过程?尽管写一个存储过程可能比较复杂,但一旦完成,有简单、安全、高性能的好处
    • 通过把处理封装成一个整体,简化操作
    • 保证数据完整性,不用反复建立同一个系列步骤,也就是防止错误
    • 简化对于变动的管理,比如如果相关表、列名、业务逻辑修改,则可以改存储过程。而使用者不用关心变化
    • 提高性能,存储过程比单独的sql要快
    • 存在一些职能用在单个请求中的mysql元素和特性,存储过程够可以使用它们来编写更灵活的代码
  14. 游标只能在存储过程中使用
  15. 存储过程和sql都是在被调用时触发,而触发器不是,是在某个条件触发时运行。
  16. 只有表才支持触发器,视图不支持。而且每个表每个事件每次只支持一个触发器,所以每个表最多6个触发器:insert、update、delete之前和之后。

    推荐阅读