前情回顾:昨天学习了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. 【温故Delphi】Win32API之CreateMutex

    解决问题 如何让一个软件在一台机器上只能运行一个实例呢?这个问题用专业术语就是进程互斥.这个问题可以通过CreateMutex来解决. 进程互斥的核心思想:进程在启动时首先检查是否存在此进程实例,如果 ...

  2. Red hat 6.4下面的qt安装

    运行环境:Red hat 6.4 去官网下载qt5.2并且安装 当启动的时候会出现如下错误 核心载入失败: /opt/Qt5.2.0/Tools/QtCreator/lib/qtcreator/plu ...

  3. java 8种基本数据类型的默认值及所占字节数

    通过一段代码来测试一下 8种基本数据类型的默认值 package dierge; public class Ceshi { int a; double b; boolean c; char d; fl ...

  4. visual studio 2005 常用按键

    VS2005 实用快捷键,迅速提高代码编写效率! 代码快捷键   Ctrl+J / Ctrl+K,L   列出成员   Ctrl+Shift+空格键 / Ctrl+K,P   参数信息   Ctrl+ ...

  5. allegro中焊盘的设置

    用Cadence的pad designer制作pad的时候会遇到为thermal relief和anti pad设计尺寸的问题 Thermal relief:正规的中文翻译应该叫做防散热PAD.它主要 ...

  6. GIT FLOW 时序图

    git flow sequence md link: git branching model master->master branch: use default branch Note rig ...

  7. To Use FTP Command in Linux

    Yesterday I was asked to upload a file in Linux to the corresponding server. I said "oops" ...

  8. 命令行中mysql乱码问题

    1.现象  在命令行中,执行sql语句如果包含中问题,提示“ Data too long for column '列名' at row 1”   或者在命令行中查询出的结果中,中文乱码   2.分析 ...

  9. 如何解决SoftekBarcode.dll加载失败的问题

    本文转自:慧都控件网 Softek Barcode Reader Toolkit是专门从事于条形码读取技术的软件公司Softek旗下一款著名的条码读取工具包.最近有部分用户反映在运行此工具包时会遇到“ ...

  10. Request三种获取数据的方式

    今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Req ...