MySQL权威指南读书笔记.docx
- 文档编号:1368441
- 上传时间:2022-10-21
- 格式:DOCX
- 页数:20
- 大小:34.98KB
MySQL权威指南读书笔记.docx
《MySQL权威指南读书笔记.docx》由会员分享,可在线阅读,更多相关《MySQL权威指南读书笔记.docx(20页珍藏版)》请在冰豆网上搜索。
MySQL权威指南读书笔记
MySQL权威指南读书笔记
第一章,MySQL和SQL入门(一,对数据库的理解)
这一章共78页,我看了两周。
很少有技术类书籍一开篇就讨论SELECT语句的,这是此书给我的第一个印象,本章把这个语句讲解得十分详细。
我觉得第一章主要是讨论两个问题:
1,通过两个样板数据库讲解对数据库理论的理解;2,基本命令的使用。
比较高深的东西好像不多。
一,对数据库的理解
为什么要使用数据库呢,我们都看过许多说法,不外于其提供了强大的数据处理能力,如果仅仅是简单的数据列表,电子表格就完全胜任了。
在数据的世界里,MySQL被划分为关系数据库管理系统的范畴内,我们可以把这个短语划分为以下几个部分:
数据库:
存放信息的的资料库,其构造既简单又遵守一定的规律
数据库内的数据都存放在数据表(table)里
数据表是由数据行(row)和数据列(colume)构成的
一个数据行就是数据表内的一条记录(record)
一个记录一般包含多个信息,数据表中的每一个数据列都对应着一个信息
关系:
把存放在某个数据表内的信息和存放在另一个数据表内的信息通过某种方式关联起来,而这种关联就是通过查找两个数据表有无共同的元素来实现的。
先看一个简单的例子:
你的站点上有大量的广告,每当客户浏览你的网页时,一旦点击你的广告,你就需要做记录来计算自己得到了多少广告费。
从数据库的角度来说,你应该建立三个数据表。
1,各个广告的来源company表
CompanyCompany_numAddressphone
SONY13马家沟0451-21
CANON14新阳路0451-22
2,各个广告的数据ad表
Company_numAd_numHit_fee
1248001
1349003
1450004
3,每个广告的点击率hit表
Ad_numDate
483.12
493.14
483.12
503.14
看看我们能通过这三个数据表查询到什么信息?
1,你为多少家公司做广告?
查一查company表有多少行就知道了
2,你一共有多少个广告?
查一查ad表有多少行就知道了
3,在3.12这一天,你一共显示了多少个广告?
查一查hit表里面Date数据列的值是3.12的数据行共有多少?
4,在3.14这一天,CANON的广告被点击了几次?
首先在company表中找到CANON公司的公司代码(14),根据这个代码在ad数据表中找到CANON公司的广告代码(50实际上可能是很多个),然后分别在hit表中找到3.12日这个代码的点击率。
看到这里我们就能明白,为什么要费力气地把数据“分散”到多个表里面,而不是放到一个大表格中,数据库的非凡能力就表现在这里,把分散在多个数据表中的数据用一种相互匹配的方式迅速地搜集到一起得出结果,这就是数据库式的思维方式。
我们必须慢慢习惯,然后自觉运用。
是不是很简单?
如何让读者更好地理解这种“关系”的概念,书中给了两个样板数据库,听我慢慢道来:
1,你现在是美国历史研究会的秘书,这个协会是由一些对美国历史感兴趣的人自发地组织起来的,由于各人的爱好,他们将定期地交纳一定的会费来维持其会员资格,交上来的会费主要用于支付研究会的各种开支,如印刷会员刊物等。
这个研究会目前建有一个小型的互联网站点,但这个站点还没有得到充分的开发利用,如果你的主要工作是用字处理来打印会员名录的话,数据库就没有必要的,但是许多的工作要求很复杂的操作:
如,你希望能够根据不同的情况把会员名录输出为其它格式的资料;根据特定的条件来查询会员;能够根据某种限制得到统计数字,等等,如果把研究会的会员资料放到网站上,那么对会员自己来说,以在线方式修改自己的资料,查询其他人的资料就会容易得多。
甚至会员们可以互相发布消息,写电子邮件,等等。
2,你是一名教师,在每学期中,你负责考试和测验,记录各种分数,期末时,你要对学生们的成绩进行总评。
并把学生们的总评成绩和出勤情况上报给校方,如果不使用数据库,你就必须每学期都手工完成这些工作。
如果用传统方法,手工来统计考试积分表,你的表格可能就会是这样:
学生
ID姓名分数
QQTQQT
9/39/69/99/169/2310/1…
1
2
3
4
…李寻欢
荆无命
吕奉先
王怜花
…14
17
15
14
…10
10
10
13
…73
68
78
85
…14
17
12
13
…15
14
17
19
…67
73
82
79
……
…
…
…
…
毫无疑问,从关系的角度来说,这样的表格是无法直接放到数据库里面的。
我们必须对其进行分解。
当然,分数表(score表)是最先必须建立的。
最简单的模型可能是这样:
NameDateScore
李寻欢9.314
荆无命9.317
吕奉先9.315
王怜花9.314
李寻欢9.610
荆无命9.610
吕奉先9.610
王怜花9.610
我们很快就能发现这个表的问题:
它丢失了一些数据,我们不能知道当天进行的是考试还是测验。
看来需要加入一个数据列:
NameDateScoreType
李寻欢9.314Q
荆无命9.317Q
吕奉先9.315Q
王怜花9.314Q
李寻欢9.610T
荆无命9.610T
吕奉先9.610T
王怜花9.610T
我们又发现了一个问题,那就是本表的多余数据太多了,同一天里面的Type数据列的值是相同的,这种数据冗余是完全没有必要的。
把表拆分一下如何:
score表
NameDateScore
李寻欢9.314
荆无命9.317
吕奉先9.315
王怜花9.314
李寻欢9.610
荆无命9.610
吕奉先9.610
王怜花9.610
event表
dateType
9.3Q
9/6Q
9/9Q
9/16T
9/23T
10/1T
看起来好多了,虽然数据表的数据多了一个,但对数据库来说完全不是问题,我们可以继续考虑我们的成绩表:
如果一天内有两场考试怎么办?
我们需要在同一天内记录两组分数!
既然如此,可以为每一次考试或者测验分配一个独一无二的编号,用这个编号来关联两个表,这样就避开了日期重复的问题了。
score表
NameEvent_idScore
李寻欢114
荆无命117
吕奉先115
王怜花114
李寻欢210
荆无命210
吕奉先210
王怜花210
event表
Event_iddateType
19.3Q
29/6Q
39/9Q
49/16T
59/23T
610/1T
这样就完成了数据表的规划吗?
好像还不行,考虑一下,如果有重名的学生如何处理呢?
看来,用学号来解决这个问题就行了。
1,student表
NameSexStudent_id
李寻欢F1
荆无命F2
吕奉先F3
王怜花F4
2,score表
Student_idEvent_idScore
1114
2117
3115
4114
1210
2210
3210
4210
3,event表
Event_idDate
9.3Q
9/6Q
9/9Q
9/16T
9/23T
10/1T
终于完成了考试积分表的规划!
我们学到了什么呢?
数据库应该是什么样子,它应该包含哪些数据表,各个数据表应该有什么内容以及数据应该如何表示?
我们看到的许多理论性很强的教材,就在讲述“数据库的分析与设计”,“实体关系图”,“规范化过程”,“第三范式”等等很枯燥的概念。
至少在本章中作者没有提到这些东西,而是用一种比较自然,直观的途径让我们了解了一些数据库的基本知识,我觉得这一点很值得推崇。
数据库上
1最常见的操作是对现有数据进行检索;
2比较常见的操作是插入新数据;
3比较不常见的操作是创建数据表;
4最不常见的操作是创建数据库。
我们学习的步骤是从4到1,
①先看看如何建立我们的样板数据库,一个命令就行了
CREATEDATABASEsampdb;
②建立各个数据表
1建立“美国历史研究会”里面的总统表
CREATETABLEpresident
(
last_nameVARCHAR(15)NOTNULL,
first_nameVARCHAR(15)NOTNULL,
suffixVARCHAR(5)NULL,
cityVARCHAR(20)NOTNULL,
stateVARCHAR
(2)NOTNULL,
birthDATENOTNULL,
deathDATENULL
);
2建立“美国历史研究会”里面的会员表
CREATETABLEmember
(
member_idINTUNSIGNEDNOTNULLAUTO_INCREMENT,
PRIMARYKEY(member_id),
last_nameVARCHAR(20)NOTNULL,
first_nameVARCHAR(20)NOTNULL,
suffixVARCHAR(5)NULL,
expirationDATENULLDEFAULT'0000-00-00',
emailVARCHAR(100)NULL,
streetVARCHAR(50)NULL,
cityVARCHAR(50)NULL,
stateVARCHAR
(2)NULL,
zipVARCHAR(10)NULL,
phoneVARCHAR(20)NULL,
interestsVARCHAR(255)NULL
);
3,建立记分系统中的student表
CREATETABLEstudent
(
nameVARCHAR(20)NOTNULL,
sexENUM('F','M')NOTNULL,
student_idINTUNSIGNEDNOTNULLAUTO_INCREMENT,
PRIMARYKEY(student_id)
);
4,建立记分系统中的score表
CREATETABLEscore
(
student_idINTUNSIGNEDNOTNULL,
event_idINTUNSIGNEDNOTNULL,
PRIMARYKEY(event_id,student_id),
scoreINTNOTNULL
);
5,建立记分系统中的event表
CREATETABLEevent
(
dateDATENOTNULL,
typeENUM('T','Q')NOTNULL,
event_idINTUNSIGNEDNOTNULLAUTO_INCREMENT,
PRIMARYKEY(event_id)
);
③插入新数据,操作命令可以有多种格式,我们用最简单的student表举个例子
INSERTINTOstudentVALUES('Megan','F',1);
INSERTINTOstudentVALUES('Joseph','M',2);
INSERTINTOstudentVALUES('
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 权威 指南 读书笔记