徐员外#《MySQL必知必会》100本技术书之14

Mysql作为赫赫有名的结构化关系型数据库系统,陪伴着我们完成了一个又一个的项目,《MySQL必知必会》这本书虽然有点老,但从学习的角度来讲并不过时,程序员的工作性质也不同于DBA,一天到晚跟数据库打交道,通可以过阅读本书可以很好的巩固已有的知识,让技能得到进一步的提升。

我很喜欢这本书的编排风格,每一个案例讲解都是通过“输入----输出---结果分析”这样的一个思路在进行的,这样我们知道从何而来,到哪里去,为什么会这样。

对于有基础的同学可以前面四章可以快速阅读,没有什么太多重要的知识,介绍了什么叫数据库、表、字段等一些基础性的概念。从第五章开始,也就是从检索数据开始介绍SQL(结构化查询语言)的知识。

知识的讲解由浅入深,从一个简单查询如”select name,price from products”开始,讲到去重distinct语法,获得限定的结果集limit

接着讲到按列排升序和降序获得查询结果

接着讲到了通过where条件语句的(=、and、or、NOT NULL、between and、in等)进行数据过滤,如

后面又讲到了通配符(% ,_)和在查询语句中使用正则表达式regexp(),特别是正则表达式,功能真的很强大,正则表达式的写法

从第十章到十三章开始讲一些函数,如数学计算sum()、avg,字符串去空格trim(),日期格式month()等,然后介绍了group by分组语句及having条件,之后又介绍了select子句,也叫嵌套查询语句,无论它嵌套多少层,其实掌握技巧都不难,技巧就是先单独验证子查询没有错误后一层一层的往条件中加子查询,但是过多的条件嵌套语句,会严重影响sql的执行效率。

第十五章讲了联结查询,也就是进行多表查询,一般会用到join、inner join、leftjoin、left outer join、right join、right outer join、full join、full outer join等,但在实际的开发中,按照经验,我们一般先要确定两张表的关系,比如是主外键一对多或多对一关系,一般用left join 或right join语句,如果是多对多的关系,在实际的项目中一般会建立第三方表关联成一对多或多对一。此处根据实际的业务需求采用不同的连接方式,总的来讲遵循如下法则:

左连接:保留左边全部行。按左边行顺序和右边比较是否相等。相等就连接成一行。可以多对多

右连接:保留右边全部行。按右边行顺序和左边比较是否相等。相等就连接成一行。可以多对多

内连接:不保留不相等的行。左右有相等的就连接,不相等的多去掉不要。可以多对多

另外,联结使用不当的话会产生笛卡尔积,也就是我们常说的重复的脏数据。

第十七章介绍了组合查询union关键字,也就是把多条查询语句的查询结果拼接在同一个结果集中返回,如

在下一章介绍了全文本搜索,也就是在创建表的时候通过建立fulltext类型字段,此字段将来用来建立索引,可以通过mysql提供的Match()和Against()函数完成,我认为此部分的知识了解即可。至此,mysql的查询语句全部介绍完毕。接下来还有,DDL语句、删除、修改、插入等语句的介绍。

插入数据,可一次性插入多条且支持插入子查询的数据如

Insert into products(name,price) values(“zhangsan”,100),(“lisi”,130);

Insert into products(name,price) select name,price from orders limit 10;

更新和删除数据,可以删除制定条件及支持子条件查询

接下来的第二十一章是DDL(数据定义语句),如创建、删除、修改数据库、表等

删除表跟重命名表的语法很简单,如drop table products, rename table products to new_products

第二十二章介绍了视图,当我们在进行数据处理时,如果有大量的查询,我们可以把一些比较复杂的查询封装成虚拟的表,也就是视图。再要对其结果进一步查询的时候,我们从视图中进行查询,这样可以提高效率,也避免了sql复杂度的进一步提升。如:

第二十三章介绍了存储过程,相当于批处理功能,就是把我们常用的多条语句封装成存储过程,通过执行某个存储过程,批处理多条sql语句,从而实现对数据的操作。

定义存储过程:

调用存储过程:

第二十四和二十五章介绍了游标cusor和触发器trigger,我们先要知道他们的用途,然后再掌握它们的语法,最后才是根据应用场景进行使用。

我们知道查询得到的是一个结果集,对集合中的数据我们可以一条条往前、往后浏览或做处理,cusor就提供了这样的功能.

Trigger我们可以把它看成一个自动任务,前面我讲了存储过程好比批处理,游标好比循环处理结果集,那么我们可以建立起这样的一些任务,设定相应的触发条件,比如说到了某个时间,删除某个字段之时自动触发此任务,存储过程、游标、触发器这三者一般结合使用,这部分的内容也是DBA需要掌握的技能,程序员能够对着手册写出来即可。

二十六章介绍了事务的处理,同样我们先要了解事务的概念,然后再掌握它们的语法,最后才是根据应用场景进行使用。比如我们在银行自动转账时,自己这边终端显示已经扣款成功,但对方由于系统的原因没有收到,两个系统之间的数据如何保持同步。出现问题如何回滚,这就是事务处理的范畴,实际的编程过程中,像mybaits、jpa框架等都提供了完整的解决方案,但底层原理还是这一章的内容,建议大家好好理解这一章的内容。

最后几章讲的是mysql管理维护方面的内容,这个需要在实际的工作中积累,对于知识技能的掌控,最好的方式不是死记硬背,是脑海中要有一副知识地图,知道某块知识在某块位置,解决什么样的问题,这样举一反三就容易并且有趣得多了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180814G1WKBO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券