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