比较喜欢晚上看书,什么书都行, 安静 清晰 写上一些大概只有自己才看得懂的笔记.
(这本捡破烂捡到的)
-
基础随笔
-
MySQL字符比较不区分大小写
-
转义:方式1: \ 反斜杠用来 转义 通配符 例: 李_ ->应该写为 ‘李\ _’
方式2: 使用关键字 ESCAPE 举个栗子: 李_ ->应写为 ‘李|_’ ESCAPE '|'
意思都一样,都是声明后面的那个需要转义
- REGEXP 运算符 正则表达式 -> 详见《MySQL》P106 (没书的随便百度一下,或者点这个地址康康-> 链接 <- 百度找的别人的博客,不见得永久有效, 其实用的少, 而且正则规则都一样)
- GROUP BY
GROUP CONCAT ( SEPARATOR '' ) -> 可以指定拼接使用的符号
有趣的 WITH ROLLUP
在最后加了一列 内容为 总金额/总数 看演示吧 文字描述不了 (骚操作, 挺好)
www.cnblogs.com/phpper/p/69… 结合看一下
- 连接查询
内 左外 右外 交叉 (不解释了)
联合查询 UNION[ALL] 好东西 应该大部分情况是用在统计的sql语句, 有个优点就是可 以使用上索引(非主动放弃的情况下)还可以减少写子查询.ORDER BY, LIMIT 也照样适用,写在最后即可.
- ANY SOME ALL(此ALL非彼ALL) 关键字 (额...MySQL用这么久了, 真不知道还有这几个关键字...)
功能如下:
PS: 商品表应该还有一个关联左边表商品类型的字段, 没体现出来, 知道就OK
关键字的使用例子:
ANY 和 SOME 只要满足其中一个就行 ALL需要满足所有才行
- 相关子查询
EXISTS关键字
举个栗子: 一张用户表 一张订单表 查询下过订单的用户
SELECT * FROM user
WHERE EXISTS ( SELECT * FROM order WHERE user.uid = order.uid )
外层每条数据,内层都查询一遍(效率应该挺差的) 实现这个功能的话 LEFT JOIN 和 INNER JOIN也能做 不知道这两个哪个效率高一点 盲猜 INNER JOIN.
索引
InnoDB 和 MyISAM 千篇一律的理论
MyISAM 适合数据存储
InnoDB支持事务 区别一下就出来了
MyISAM的索引类型里面有一个空间索引
就是这个东西, 大概用途是坐标地理位置相关的表使用的, 涉及到什么OpenGIS(没接触过) 而且对应的数据类型也是使用空间数据类型... 不讲这个了 结束吧
InnoDB引擎 常用 默认
支持的索引
索引方法 InnoDB只支持BTREE索引 数据库里面操作的时候可看到还有一个HASH 比如这样:
但是就算你选了, 保存之后 默认会变成BTREE 因为不支持HASH 不信可以去试 - -
索引类型:
普通索引 简单 允许空和重复
唯一索引 不允许重复值 允许空 (既然不允许重复那肯定就只能有一个空)
复合索引(组合索引/多列索引) 复合索引从左往右三个字段, 要想使用索引,必须从左使用,使用这些列的左边列时才会生效 比如: 1 2 3 123有效 12有效 1有效 13不行 23不行 3也不行 称之为**"最左前缀"**
全文索引/空间索引 省略... (高度不够)
索引设计原则 记住要领 剩下的 交给实践
视图 :
优点 :
(1)数据库视图允许简化复杂查询: 数据库视图由许多基础表相关联的SQL语句定义。 通过数据库视图,您只需要使用简单的SQL语句,而不是使用具有多个连接的复杂的SQL语句
只是包装了而已 该慢的还是慢
(2)数据库视图有助于限制对特定用户的数据访问。 您可能不希望所有用户都可以查询敏感数据的子集。可以使用数据库视图将非敏感数据仅显示给特定用户组。
在不知道库/表的情况下,只能看到视图的字段能限制看到哪些数据的权限
(3)数据库视图提供额外的安全层。 安全是任何关系数据库管理系统的重要组成部分。数据库视图为数据库管理系统提供了额外的安全性。数据库视图 允许您创建只读视图,以将只读数据公开给特定用户。用户只能以只读视图检索数据,但无法更新
比如一种业务场景: 我在订单表里面绑定用户表的id, 同时冗余用户姓名, 或者还冗余一点其它的高频字段, 查询的时候就没必要去关联, 但这时候数据的维护就成问题了. 可以使用视图解决这类场景. 但是我工作到目前 几家公司一直没这么搞(不明白具体原因)
更新方面 视图的好处就是更改视图数据的时候, 数据库表的那条数据也会更改.
(4)数据库视图实现向后兼容。 假设你有一个中央数据库,许多应用程序正在使用它。有一天,您决定重新设计数据库以适应新的业务需求。删除 一些表并创建新的表,并且不希望更改影响其他应用程序。在这种情况下,可以创建与将要删除的旧表相同的模式的数据库视图
这种方式能实现逻辑数据隔离, 创建视图或者改变表能保证原应用照样可用. 相当于有了备份(已经定义在视图里面的字段不能删改)
缺点 :
性能方面:还是运行原本的复杂语句 只是进行了包装
表依赖关系: 根据数据库的基础表创建一个视图。所以更改表的时候,也要去更改视图。
编写高效的数据查询
1 优化数据访问 不请求不需要的数据
查询开销(响应时间 查询扫描行+返回行)
2 EXPLAIN 执行计划 主要看type列 + possible_keys列
type列的级别越高,性能越好
possible_keys表示使用的索引
如果key列有值, 则表示key的值为更好的索引, 可以通过改造查询条件优化查询
持续更新... 直到把这本书看完