两年前买的书,因为种种原因一直没看,零碎抽点时间看一遍,感觉对自己有用的就顺手记录下。之后转身就把这本书甩了,因为这本书的内容大多是增删改查语句,不实操只看的话,没有什么意义。而且作为一个测试,其实在日常工作中对数据库的初级运用也就只是增删改查语句了。

1、为什么要使用IN操作?其优点具体如下:

a).在使用长的合法选项清单时,in操作符的语言更清楚且更直观;

b).在使用in时,计算的次序更容易管理;(因为使用的操作符更少)

c).in操作符一般比or操作符清单执行更快;

d).in的最大优点是可以包含其他select语句,使得能够更动态的建立where语句。

2、where和having的区别:

a).where过滤行,having过滤组;

b).where在数据分组前进行过滤,having在数据分组后进行过滤。where排除的行不包括在分组中,这可能会改变计算值,从而影响having子句中基于这些值过滤掉的分组。

3、group by与order by的差别:

ORDER BY GROUP BY
排序产生的输出 分组行,但输出可能不是分组的顺序
任意列都可以使用(甚至非选择的列也可以使用) 只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用

4、UNION的使用:

这样一条SQL:

select pid,vid from table_name where pid<=4 or vid in(1001,1002)

可以用UNION写成:

select pid,vid from table_name where pid<=4 UNOIN select pid,vid from table_name where vid in(1001,1002)

能用where条件去查询的,几乎都能用union。union查询出来的数据默认是去重的,所以如果需要显示所有的数据(包括重复行),那么需要把union改成union all。

5、增删改示例:

INSERT INTO table_name VALUES (值1, 值2,....)       ——插入行
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) ——插入列
UPDATE table_name SET key=new_values1,key2=new_values2 where xx=xx ——key为要更改的字段,new_values为更新后的值
DELETE FROM table_name WHERE xx=xx

如果需要降低insert语句的优先级,可在insert和into之间添加关键字LOW_PRIORITY,此法同样适用于update和delete。

delete删除的是整行而不是删除列,如果删除制定的列,可使用update(值为NULL)。

delete不删除表本身,若想从表中删除所有行,可使用TRUNCATE TABLE语句,速度更快(TRUNCATE实际上是删除原来的表并重新创建一个表)。

6、创建表示例语句:

CREATE TABLE table_name
(
key1 int NOT NULL AUTO_INCREMENT,
key2 char() NOT NULL,
key3 char() NULL,
key4 char() NULL,
......
...
PRIMARY KEY(ZC_id) /*zc_di为主键,主键值必须唯一,主键中只能使用不允许NULL值的列*/
)ENGINE=InnoDB; /*InnoDB为数据库引擎,如果省略ENGINE=语句,则使用默认引擎(很可能是MyISAM)*/

  创建新表时,指定的表名必须不存在,列名在表中必须是唯一的。

  每个表只允许一个AUTO_INCREMENT列,而且它必须被索引。它告诉Mysql,本列每当增加一行时自动增量,每次执行一次insert操作,Mysql自动对该列增量,一般用于做主键值。

__几个需要知道的引擎(引擎类型可以混用):

a).InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;

b).MEMORY在功能上等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适用于临时表);

c).MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

7、视图相关

  视图为虚拟的表,包含的不是数据而是根据需要检索数据的查询。视图提供了一种Mysql的select语句层次的封装,可用于简化数据处理以及重新格式化基础数据或保护基础数据。

  视图可用于重用SQL语句,简化复杂的SQL操作(一般为select),使用表的组成部分而非整个表,保护数据以及更改数据格式和显示。

__创建&使用视图的规则和限制:

a).视图的命名必须唯一(视图之间不能重名,视图不能与表同名);

b).可以创建的视图数目无限制,必须就有足够的访问权限才能创建视图,视图可以嵌套;

c).ORDER BY可以用在视图中,但如果从该视图中检索数据的select语句中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖;

d).视图不能被索引,也不能有关联的触发器或默认值,视图可以和表一起使用;

e).使用SHOW CREATE VIEW view_name;来查看创建视图的语句;

f).用DROP删除视图,其语法为DROP VIEW view_name;

g).更新视图时,可以先用drop在使用create,也可以直接用create or replace view。

  视图可用于重用SQL语句,简化复杂的SQL操作(一般为select),使用表的组成部分而非整个表,保护数据以及更改数据格式和显示。

  通常,视图是可更新的,更新一个视图将更新其基表(因为视图本身是没数据的),但是并非所有的视图都是可更新的,基本上来说,如果Mysql不能正确的确定被更新的基数据,则不允许更新(delete&insert同理)。

__视图定义中有如下操作,则不能进行视图的更新:

a).分组(使用GROUP BY和HAVING);

b).联结;

c).子查询;

d).并;

e).聚集函数(Min()、Count()、Sum()等);

f).DISTINCT;

g).导出(计算)列。

8、存储过程(游标)

  这东西比较尴尬,貌似现在很多开发人员都放弃它了。个人认为是因为可维护性太低了,而且这东西的编写还需要比较好的技术和经验,否则可能会导致性能反而比普遍的SQL更低,当初之所以用存储过程是因为它简单、安全、高性能。Mysql的游标只能用于存储过程(和函数),所以游标这一章也略过了。

9、触发器

  需要在某个表发生更改时自动处理,这就是触发器。触发器是Mysql响应delete&insert&update语句(或位于Begin和End语句之间的一组语句)而自动执行的一条Mysql语句。触发器仅支持表,临时表和视图均不支持。

__创建触发器时,需要给出一下信息:

a).唯一的触发器名;

b).触发器关联的表;

c).触发器应该响应的活动;(delete、insert或update)

d).触发器何时执。(处理之前或之后)

__触发器的几个小点:

a).创建触发器可能需要一定的权限,但是触发器的执行是自动的;

b).触发器可以保证数据的一致性(大小写、格式等),在触发器中执行这种类型的处理的优点是它总是进行这种处理,而且是透明的执行,与客户机应用无关;

c).触发器的一种非常有意义的使用是创建审计跟踪,把更改(如果需要,甚至还有之前和之后的状态)记录到另一个表非常容易;

d).Mysql触发器不支持CALL语句,这表示不能从触发器内调用存储过程,所需的存储过程代码需要复制到触发器中。

10、事务处理

a).事务处理是一种机制,用来管理必须成批执行的Mysql操作,以保证数据库不包含不完成的操作结果,利用事务处理,可以保证一组操作不会中途停止,或者作为整体执行,或者完全不执行,其中如果发生错误,则进行回退;

b).事务处理用来管理INSERT、UPODATE和DELETE语句,你不能回退CREATE或DROP操作,事务处理块中可以使用这两条语句,但如果执行回退,它们不会被撤销;

c).事务处理块中,提交不会自动进行,为了进行明确的提交,使用COMMIT语句。当COMMIT或ROLLBACK语句执行后,事务会自动关闭;

d).如果事务需要部分提交或者回退,则需要在合适的位置添加占位符(保留点),每个保留点都取表示的唯一名字,以便在回退时,Mysql知道回退到何处,保留点在事务处理完成后自动释放;

e).如果不需要Mysql自动提交更改,可使用 SET autocommit=0;autocommit标志决定是否自动提交更改,只要其为(假),则Mysql就不会自动提交更改。autocommit标志针对每个连接而不是服务器。

11、查看日志文件

a).错误日志。它包含启动和关闭问题以及任意关键错误的细节,此日志通常名为hostname.err,位于data目录中;

b).查询日志。它记录所有Mysql活动,在诊断问题时非常有用,此日志文件可能会很快变得非常大,因此不应该长期使用它。此日志通常名为hostname.log,位于data目录中;

c).二进制日志。它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录内;

d).缓存查询日志,此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用,通常命名为hostname-slow.log,位于data目录。

  在使用日志时,可用FLUSH LOGS语句来刷新和重新开始所有日志文件。

___胸中一点浩然气,天地千里快哉风

《Mysql必知必会》笔记的更多相关文章

  1. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  2. CSS笔记--选择器

    CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...

  3. HTML+CSS笔记 CSS中级 一些小技巧

    水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...

  4. HTML+CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  5. HTML+CSS笔记 CSS中级 缩写入门

    盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...

  6. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  7. HTML+CSS笔记 CSS进阶续集

    元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...

  8. HTML+CSS笔记 CSS进阶

    文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...

  9. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

随机推荐

  1. Ubuntu OpenJDK + Tomcat7 的安装

    jdk1.7.0安装首先安装openjdk,安装命令如下图. 安装好之后检查jdk文件路径,如下图. 建立链接(ls),如下图. 成功之后,配置环境变量,并重新运行一下,如下图. 环境变量在文件最后面 ...

  2. csv注入漏洞原理&&实战

    前言  为了找工作,巩固巩固知识.本文会介绍 csv 注入漏洞的原理,最后给出一个示例.  正文 在 csv 文件 和 xlsx 文件中的每一项的值如果是 =, @, +, - 就会被 excel 识 ...

  3. linux系统下安装ssl证书(tomcat)

    1.申请ssl证书 2.下载ssl证书 打开此网址  https://myssl.com/cert_convert.html 将证书文件(xxx.com.crt)和密钥文件上传(xxx.com.key ...

  4. Java设计模式----初识适配器模式

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  5. leetCode题解之判断一个句子中的字符和数字是否构成回文

    1.问题描述 Given a string, determine if it is a palindrome, considering only alphanumeric characters and ...

  6. kvm 启动libvirtd时出现错误

    kvm 启动libvirtd市出现错误: /etc/init.d/libvirtd start启动 libvirtd 守护进程:libvirtd: relocation error: libvirtd ...

  7. windows zend_guard+apache no ssl+php no Thread Safe fastcgi模式 环境配置

    最近公司要做代码加密,就采用ZEND GUARD 方式加密代码 并进行显示 此文为总结,以备自己以后查看和给需要的同学们参考 采用的php为5.3版本  由于现在加密的更改, 能支持zend guar ...

  8. selenium&phantom实战--获取代理数据

    获取快代理网站的数据 注意: #!/usr/bin/env python # _*_ coding: utf-8 _*_ # __author__ ='kong' # 导入模块 from seleni ...

  9. Kubernetes简述

    一.Kubernetes特性 1.自动装箱 建构于容器之上,基于资源依赖及其他约束自动完成容器部署且不影响其可用性,并通过调度机制混合关键型应用和非关键型应用的工作负载于一点以提高资源利用率. 2.自 ...

  10. 转:java 委托

    委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理.委托模式是一项基本技巧,许多其他的模式,如状态模式.策略模式.访问者模式 ...