前情回顾:昨天学习了MySQL中索引的设计与使用,还了解了一些常见的SQL注入攻击的手段以及防范方法,一般来说,在面试的时候如果不是要求比较高,基本就够用了。

今天碰见一个拿了TP-LINK的offer的同学从图书馆回来,一边走一边聊了几句。我笑着说:拿了offer还去图书馆干嘛?他说没打算去。我问干嘛不去,他回答说准备专心考公务员。其实我前段时间,大概是半年前吧,也有考虑过考公务员。那时候主要是觉得自己技术渣,而且又不想去学,所以就经朋友介绍想考回深圳去工作。后来因为自己兴趣培养得还不错,而且也感觉自己的性格不太适合进体制,也就作罢了。

  听说做了公务员或者进了国企技术就废了,不知道是不是真的,大家比较有社会经验和见识的不妨给楼主说说啊。

至于我自己嘛,专注复习基础知识,专注提高自己的水平,找工作要紧。

————————————————————————————闲聊结束————————————————————————————————————————

  今天的任务,主要是复习存储过程、函数、触发器,以及了解学习部分数据库优化的东西。现在,开始。

第九章:存储过程、函数、触发器

      第一节:什么是存储过程、函数、触发器

存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。而触发器则是特殊的存储过程,触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

存储过程和函数的区别在于函数必须有返回值,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型,而函数的参数只能是IN类型。

其中,MySQL提供了多种内建函数帮助开发人员编写简单高效的SQL语句,其中常用的函数有字符串函数、日期函数和数值函数。有用到或者有兴趣了解的童鞋可以查询MySQL文档等相关资料。

 第二节:存储过程和函数的注意事项

在资料中,有对存储过程和函数的相关操作进行讲解,介绍了变量、条件、光标、流程控制的定义和使用,这些就不一一说明了。

存储过程和函数的优势是可以将数据的处理放在数据库服务器上进行,避免将大量的结果集传输给客户端,减少数据的传输,但是在数据库服务器上进行大量的复杂运算也会过度占用服务器的CPU,造成数据库服务器的压力。所以,不要在存储过程和函数中进行大量的复杂运算,应尽量将这些运算操作分摊到应用服务器上执行。

 第三节:触发器

触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

  需要注意的是触发器是行触发的。每次增加、修改或者删除记录都会触发进行处理,编写过于复杂的触发器或者增加过多的触发器对记录的插入、更新、删除操作肯定也是会有比较严重的影响。因此数据库设计的时候应该有所考虑,不要将应用的处理逻辑过多的依赖于触发器来处理。

接下来,会讲一些关于数据库性能优化的内容,今天先讲一部分。

第十章:SQL技巧与优化

  第一节:SQL小技巧

1.在SELECT等查询语句中使用正则表达式

什么是正则表达式就不多说了,相信大家都知道。举个例子,如果要实现以下包含正则表达式的SELECT语句

SELECT name , email from table where email REGEXP "@163[.,]com$";

使用普通的LIKE语句,就要写成下面这样,明显是比较长而且繁琐的

SELECT name , email from table where email like"@163%.com" or like"@163%,com"

2.RAND()函数与ORDER BY子句配合使用,能够实现随机抽取样本的功能,举例就免了,这个技巧在进行数据统计的时候很方便。
      3.BIT函数与GROUP BY子句的联合使用在某些应用场合可以大大降低存储量,提高统计查询效率

像这样的小技巧有很多,知道一些,在面试中讲出来能加点分。

  第二节:SQL优化

首先,我们来讲讲当面对一个有SQL性能问题的数据库时,是怎样一步步进行系统分析,定位问题SQL并尽快解决问题的。

第一步:通过show status命令了解各种SQL的执行频率

第二步:定位执行效率较低的SQL语句

第三步:通过EXPLAIN分析低效SQL的执行计划

第四步:确定问题并采取相应的优化措施

接下来,介绍两个简单实用的优化方法:

1.定期分析表和检查表,语法如下:

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,tbl_name]...

2.定期优化表(只对MyISAM、BDB和InnoDB表起作用),语法如下:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

需要注意的是,执行期间将对表进行锁定,因此一定注意要在数据库不繁忙的时候执行相关的操作。

—————————————————————————————第十一天——————————————————————————————

  今天去了一场笔试,完了赶回来把今天的博客搞定。

1.随着复习的推进,好多之前没什么印象的、没怎么学过的内容都出来了,要多花点时间才行。由于进度原因,数据库(Mysql)系列就暂告一个段落了,明天开始下一个系列。

2.我打算明天写一篇内容多点的,认真点的博客,还是发首页吧。

3.我打算,如果关注我的人多了,就在写一些“文章”(不是现在所写的“随笔”),说一些我想说的话。

渣渣小本求职复习之路每天一博客系列——数据库基础(MySQL)(5)的更多相关文章

  1. 渣渣小本求职复习之路每天一博客系列——Java基础(9)

    ———————————————————————今天不闲聊————————————————————————————— 第十一章:线程 第四节:synchronized与同步 首先,我们来看一段代码: p ...

  2. 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)

    前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...

  3. 渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(5)

    前情回顾:昨天简单地介绍了一下如何使用vi编辑器,例如命令模式和插入模式的切换,以及一些简单命令的讲解. —————————————————————————直接就开始吧———————————————— ...

  4. 用RecyclerView做一个小清新的Gallery效果 - Ryan Lee的博客

    一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...

  5. 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析OpenHarmony源码 | v54.01

    百篇博客系列篇.本篇为: v54.xx 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 51.c.h.o 下图是一个可执行文件编译,链接的过程. 本篇将通过一个完整的小工程来阐述E ...

  6. Python之路【第二十三篇】:数据库基础

    数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...

  7. 重回程序员之路。重写博客。我的ecshop小京东二开问题汇总与解决方案。

    问题1:混合支付(余额支付+在线支付)不跟更新订单状态问题. 解决方案:http://bbs.ecshop.com/viewthread.php?tid=156761&highlight= i ...

  8. 博客与微信小程序的同步

    在此之前,先说说自己最近的打算,才购买了阿里云的服务器,想做一个网站和图床网盘之类的方便自己使用. 考虑到小程序,又打算将自己的博客内容放到小程序中.从零开发实属困难,应该还要一段时间才能完成. 目前 ...

  9. 使用小书匠及markdown here编辑博客和微信公众号

    1. 使用小书匠连接Evernote并发布笔记到博客园 1.1 小书匠初探 我平时的信息收集的主要方法是采用Pocket+Evernote. 简单来说: 如果访问到非常有用,而且是必须要立刻记录的内容 ...

随机推荐

  1. shell <<EOF

    1.考虑下面的需求,在主shell执行命令,进入其他的命令,后面的输入,想作为命令的输入,而不是主shell的输入,怎么办? 2.使用<<EOF,告诉主shell,后续的输入,是其他命令或 ...

  2. firefox的console log功能

    http://www.ruanyifeng.com/blog/2011/03/firebug_console_tutorial.html Firebug是网页开发的利器,能够极大地提升工作效率. 但是 ...

  3. Spring+struts2的基础上继续加hibernate3的jar包

  4. 【IOS】Xcode7以上免证书真机调试

    Xcode7之前,想要真机调试,必须花99刀购买开发者账号,而且步骤繁琐,需要下载证书.随着Xcode7的推出,大幅度的简化了真机调试的步骤,对ios开发工作者和正在学习ios开发的众多码农们,可以说 ...

  5. G.Interference Signal---河南省第八届程序设计大赛(dp)

    G.Interference Signal 时间限制: 2 Sec  内存限制: 128 MB提交: 47  解决: 18[提交][状态] 题目描述 Dr.Kong’s laboratory moni ...

  6. [转]SQL Server字符串处理函数大全

    select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不 ...

  7. K/3 Cloud开发之旅--环境准备篇

    K/3 Cloud是金蝶软件新推出的一款产品,介绍我就不多说了,谁用谁知道啊,那么我们如果要基于它做开发需要什么环境呢 开发环境必备软件 1 操作系统Windows X86/X64 或者Windows ...

  8. 【转】当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

    http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/panx ...

  9. ros下多机器人系统(1)

    multi-robot system 经过两个多月的ros学习,对ros的认识有了比较深入的了解,本篇博客主要记录在ros下开发多机器人系统以及对ros更深入的开发.本篇博客是假定读者已经学习完了全部 ...

  10. 数学工具之mathgv

    做科研时,数学必不可少,有时要看一个方程的很多特性,当然,自己了解的当然好,可要是碰到复杂的,一下子是看不出来,这个时候借助数学工具可以很好地画出来,这里介绍mathgv这个软件. 此软件是开源的,使 ...