抱歉,这两天忙着看《并行计算》,终于把今天的作业给完成了,这才有时间来继续总结《mysql完全手册》
接下来的是针对数据库使用者的部分:使用。本书中最重要的部分就是这里了,我们本科学过《数据库》的人,虽然可以完全不看这里直接进入开发环节,但是里面很多细微之处不了解,导致开发过程中朦朦胧胧始终找不到感觉,所以还是建议看看这个部分。我看这部分很爽,因为大部分SQL语句都是学过的,同时又能了解里面细微的地方,大浪淘沙,真是一目十行,勾勾划划就翻过去200页。
这里就简单的勾画出我觉得有意思的地方,每个人的看法不一样,有兴趣你可以自己找本看看
第4章 SQL基础
这部分基本上没有什么特别重要的,有关SQL的历史,倒是有点感触,其发源于SEQUEL1,是IBM公司一个研究项目System/R的部分,后来作为Oracle商业数据库的查询语言形成事实上的标准。不知道中国什么时候可以出IBM和Oracle这样的IT巨鳄,让华夏子孙扬眉吐气一把
有两个小地方可以注意:insert一个表时候,可以方便的自己制定插入顺序;distinct可以出去重复的记录
第5章 MySQL数据类型
强烈推荐这个部分,以前自己是胡乱摸索的,建数据库都是在phpMyAdmin下面跟着感觉走,很多类型都不知道为什么这样。下面的一些是我不太清楚的地方,推荐阅读这个章节
1,char指定长度,不足部分填充,varchar制定最大长度,不足部分省略掉
2,unsigned修饰符规定字段只保存正的值,可以增大字段保存的范围
3,zerofill修饰符规定0可以用于填补输出值
4,float(5,2)规定显示的值不会超过5位数字,小数点后面带有2位数字
5,char类型不区分大小写,如果查询需要区分大小西,加入关键字binary
6,text类型是不区分大小写的blob类型
7,datetime有分隔符,而timestamp有分隔符,其他的差别不大
8,enum类型类似于单选,set类型类似于多选
第6章 MySQL运算符
本章不是很重要,通过phpMyAdmin的查询功能都可以猜个七七八八。比较难理解的是NULL,逻辑比较只要出现NULL,整个逻辑表达式都是NULL,比如select 2=NULL(这里的=就是C里面的==),值就是NULL,除非使用运算符<=>(NULL安全的等于)
另外一个就是字符串匹配,_匹配一个字符,%匹配1个或多个字符
第7章 MySQL函数
看到这里才知道MySQL的强大,以前我都是在应用层面上做处理,没想到居然可以在数据层就完成这些处理了。虽然强大,我还是推荐大家在应用层面上做,为什么?提高效率,提高代码的易读性。只有纯数据库使用者,没有别的办法的时候,那么再掌握这些命令吧,其余时候,当手册查找就好了。
分类如下:数学函数,聚合函数,字符串函数,日期和时间函数,加密函数,控制流函数,格式化函数,类型转化函数,系统信息函数。
稍微有用的是日期函数,加密函数,系统信息函数。做开发的人可以稍微看看,单纯的数据库使用者最好要认真研读一下。
我学习MySQL主要是开发,所以就不再自己阐述,只列举一个有意思的地方:最大值和最小值
select greatest(100,88,157,34),返回最大值157
select least(-2,5,23),返回最小值-2
select max(age) from user
select min(age) from user 返回user表中age最大和最小的
累了,先睡了,明天接着下面的目录来
第8章 使用数据库和表
第9章 使用数据
第10章 连接
第11章 子查询
第12章 事务处理
下面一点一点来笔记:
第8章 使用数据库和表
创建数据库:create database 数据库名;
选择数据库:use 数据库名;
删除数据库:drop database 数据库名;
创建表: create table table-name(field-definition,field-definition,……) type=table-type;
举例如下:
create table uses(
id INT(4) NOT NULL AUTO_INCREMENT;
fname varchar(50) NOT NULL;
INDEX(fname), PRIMARY KEY(id)
) type= InnoDB;
有意思的地方是index和type:index(索引)可以加快数据库搜索速度,如果某个字段需要经常搜索,可以加上索引,数据库会在空闲时刻索引该字段,方便查询,瑕疵是插入删除的时候占用cpu资源。type是数据库保存的格式,现在常用的是MyISAM(优化压缩比例和速度,平台无关)以及InnoDB(目前最完善的表格式),其余的格式还有ISAM,HEAP,BerkeleyDB以及MERGE等
修改表: alert table table-name(action field-definition,action field-definition,……);
这里面的action可以使Add,Drop, Alter, change中的任一个
删除表: drop table 表格名
获取数据库,表,字段和索引的信息
show databases;
show tables;
describe table-name;
第9章 使用数据
核心所在,但是又不是特别难,浏览即可
插入,更新和删除 insert, update, delete,truncate
需要注意的是delete和truncate:delete删除的是记录,即使是delete * from table-name,原来的表仍然存在,清空之后再次插入仍然会记住autoincrement序列,并且继续编号,而truncate是删除表然后重建,所以清空之后再次才入就从1开始
检索记录:select
可以使用别名:select 表名as 别名
对结果排序:order by
对结果进行分组:group by, having
使用变量:@变量名:=值
第10章 连接
还是有必要研读的,之前用到的表都是很小的表,设计数据库也没有用到过多的连接,如果进行很大的应用设计,就十分有必要了
交叉连接:类似笛卡尔乘积
内连接: 左右两个表都只保留符合条件
左连接: 保留左面表全部,右面列出符合条件
右连接: 保留右面表全部,左面列出符合条件
自连接: 自己和自己连接,一般用在目录的分级,通过为表另取一个名字来复制表,然后通过其他连接方式在复制品之间进行连接
第11章 子查询
子查询就是一个select查询是另一个查询的附属。从MySql4.1开始可以潜逃多个查询。虽然很有用,但是很大程度上影响了数据库性能,建议通过mysql变量解决或者交给上层应用逻辑实现,所以这章粗略翻过就好了
使用方法列举如下:
在一个where或者having字句中使用
与比较和逻辑操作符一起使用
与in成员测试一起使用
与exists布尔测试一起使用
在一个from字句中使用
与连接一起使用
与update和delete查询一起使用
第12章 事务处理
事务处理就是将一系列mysql语句整合起来作为一个单独的事务单元处理,并且让这个单元具有自动执行的能力。这是MySQL中的一个新特征,仅仅支持InnoDB和BDB类型的数据库。MyISAM可以通过锁的方式模拟实现。在大的数据库系统中(以及我们学习的数据库教程中),数据库对事务处理的支持要考虑到很多的东西,每个事务必须满足ACID四个属性,即原子性、一致性、孤立性和持久性。 事务可能导致数据库资源的性能降低,因为当多个用户访问同一个数据库时候,需要很大的资源来使得事务相互隔离开。所以,从性能角度入手,MySQL开始并没有好好的支持事务。所以这章也只需要了解到这层即可。操作的回滚还是交给数据库管理员操作吧(之三将会讲到数据库管理员的备份工作)