随笔<<MySQL数据库技术与项目|应用教程>>

269 阅读5分钟

比较喜欢晚上看书,什么书都行, 安静 清晰    写上一些大概只有自己才看得懂的笔记.

(这本捡破烂捡到的)

  • 基础随笔

  • MySQL字符比较不区分大小写

  • 转义:方式1:  \ 反斜杠用来 转义 通配符 例:  李_ ->应该写为    ‘李\ _’ 

                 方式2:  使用关键字 ESCAPE  举个栗子: 李_ ->应写为      ‘李|_’ ESCAPE '|'

                  意思都一样,都是声明后面的那个需要转义

  • REGEXP 运算符 正则表达式 -> 详见《MySQL》P106 (没书的随便百度一下,或者点这个地址康康->  链接  <- 百度找的别人的博客,不见得永久有效, 其实用的少, 而且正则规则都一样)
  • GROUP BY

      GROUP CONCAT ( SEPARATOR '' ) -> 可以指定拼接使用的符号

      有趣的 WITH ROLLUP 

        在最后加了一列 内容为 总金额/总数    看演示吧 文字描述不了 (骚操作, 挺好)

          www.cnblogs.com/phpper/p/93…

          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的值为更好的索引, 可以通过改造查询条件优化查询

持续更新...  直到把这本书看完