第一章:
数据库:保存有组织的数据的容器(通常是一个文件或一组文件)
表:某种特定类型数据的结构化清单。
表有一些特性,定义了数据在表中如何存储,可以存什么样的数据,数据如何分解,各部分信息如何命名。
模式:关于数据库和表的布局以及特性的信息。
列:表中的一个字段。所有表都由一个或多个列组成的。
表由列组成,列中存储着表中某部分的信息。
数据类型:所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据
行:表中的一个记录。(也可以称为数据库记录)
表中每一行都应该有一个可以唯一标识自己的一列
主键:一列(一组列) ,其值能够唯一区分表中每个行。唯一标识表中每行的这个列称为主键。
大多数情况下,创表时都具有一个主键,便于后来的操作和管理。
表中的任何列都可以作为主键:满足2个条件:(主键不重复,也不为空)
1.任意两行都不具有相同的主键
2.主键列不允许NULL值
主键通常定义在一个列上,但也可以一起多个列作为主键。所有列值的组合必须是唯一的(单个列的值可以不唯一)
主键使用的好习惯:
1.不更新主键列的值
2.不重用主键列的值
3.不在主键列中使用可能会修改的值
SQL:structured query language 是一种专门用来与数据库通信的语言。
SQL优点:
1.几乎所有的DBMS都支持SQL。
2.简单易学
3.灵活运用,可以进行很复杂和高级的数据库操作。
DBMS:存储、检索、管理、处理数据
第二章:MySQL简介
MySQL是一种DBMS。数据库软件。
MySQL特点:
1.免费
2.性能(执行快)
3.可信赖
4.简单(易安装使用)
DBMS分2类:
1.基于共享文件系统的DBMS
2.客户机-服务器的DBMS
有MySQL、Oracle。分为2个不同部分。服务器部分负责所有数据访问和处理的一个软件。运行在称为数据库服务器的计算机上。关于数据,add,delete和update的请求都由服务器软件来完成。这些请求来自运行客户机软件的计算机。客户机软件通过网络提交该请求给服务器软件,服务器软件处理这个请求,根据需要处理数据,将结果返回。
单前版本:5
一般登录操作:
mysql -u 用户名 -h myserver -P 9999 -p 用户名 主机名 端口 和密码
3个工具:
mysql命令行
MySQL Administrator 简化MySQL服务器的管理
MySQL Query Browser 图形交互客户机,编写和执行mysql命令
第三章:使用MySQL
show databases; 显示有哪些数据库
use 数据库名;
show tables; 显示该库中的表
show columns from 表名; 显示表列 等同于 desc 表名;
show create table 表名; 显示创建特定表;
show grants; 显示授予用户的安全权限
help show; 可以显示允许的show语句
第四章:检索数据
select语句:从一个或多个表中检索信息
要用select必须给出2个信息:想选择什么数据,从什么地方选
检索单个列:
select 列名字 from 表名; 从某个表中检索某一列
sql语句不区分大小写;
通常:SQL关键字都用大写,列和表名用小写。易于阅读调试
处理SQL时,空格被忽略,SQL语句可以在一行给出,也可以分成许多行,多数SQL开发人员认为将SQL语句分成多行更易阅读。
检索多个列:
select 列名1,列名2,列名3 from 表;
当然,此时需要给出多个列名,列名之间必须以逗号分隔。
最后一个列名后不加逗号了,如果在最后一个列名后加了逗号,将出现错误。
一般SQL语句返回的是原始的,无格式的数据。
检索所有列:
select * from 表名;
虽然方便省事,但是,检索不需要的列通常会降低检索和应用程序的性能。
检索不同的行:
得到的值中没有重复的行
select distinct 列名 from 表名; 只返回不同的行,必须放在列名的前面;
distinct 关键字应用于所有列而不是仅仅前置它的列。
限制结果:
select 列名 from 表名 limit 5; 仅显示前5行
select 列名 from 表名 limit 5,5; 从行5开始显示前5行
行0 :检索出来的第一行称为行0,而非行1.limit 1,1, 显示的是第二行
另一种替代写法:limit 4 offset 3; ==limit 3,4 从行3取4行
使用完全限定:
select 表名.列名 from 表名;
select 表名.列名 from 库名.表名;
第五章:排序检索数据库
讲述order by子句:
检索时,如果不排序,数据将以它在底层中出现的顺序表示。
子句:SQL语句由子句组成,有些子句是必须的,而有的可选的,一个子句通常由一个关键字和所提供的数据组成。
order by 子句取一个或多个列的名字,对输出进行排序。
按多个列排序:
只要指定列名,列名之间用逗号分开即可。
指定排序方向:
默认:升序A到Z。 ASC
还可以使用ORDER BY 子句以降序顺序排序。
降序必须指定DESC关键字。
select 列名 from 表名 order by 列名 desc;
注意:desc关键字只应用到直接位于其前面的列名。
如果要多个列都降序,那必须对每个列都指定desc;
区分大小写和排序顺序:
问题引入:A和a排序时相同吗,a位于B之后还是位于Z之后?
答案取决于数据库如何设置。
在字典排序顺序中,A被视为和a相同,这是大多数DBMS的默认行为。但是需要时是可以改变的。
使用order by 子句和limit可以找到一个列中最高或最低的值
select 列名 from 表名 order by列名 desc limit 1;找到最大值
order by 子句的位置:
保证位于from子句之后,如果使用limit,它必须位于order by 之后。
第六章 过滤数据
使用where子句:
数据库表中一般包含大量的数据,很少需要检索表中所有行,通常会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件,搜索条件也称为过滤条件。
select 列名 from 表名 where 列名=XX;
where子句的位置:
同时使用order by 和where子句的时候,order by 放其后
select 列名 from 表名 where 列名==XX** order by XX;
where子句操作符:
= 等于
<> 和!= 不等于
BETWEEN 指定的2个值之间
执行匹配时,默认是不区分大小写的。
何时使用引号:
单引号用来限定字符串,如果将值与串类型的列进行比较,则需要限定引号。用来于数值列进行比较的值不用引号。
范围值检查:
select 列名 from 表名 where 列名 BEWTEEN A AND B;
必须使用AND分隔,包含指定的A和B。
空值检查:
创建表时,表设计人员可以指定其中的列是否可以不包含值。
一个列不包含值时,称其为包含空值NULL。
IS NULL语句:
用来检查具有NULL值的列。
select 列名 from 表名 where 列名 IS NULL;
过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行。
总结:
select from where order by desc;
select from where BETWEEN A AND B;
select from where IS NULL;
第七章 数据过滤
where子句的高级操作:
组合WHERE子句:
允许使用多个where子句:以AND或者OR子句的方式使用。
操作符(operator):用来联结或改变where子句中的子句的关键字。也称为逻辑操作符。
AND:
select 列名1,列名2 from 表名 where 列名1=A AND 列名2<=B;
可以使用多条AND语句。
OR:
上述AND替换掉即可。
处理OR操作符前,优先处理AND操作符。
出现优先级问题时,可以添加圆括号。
select 列名 from 表名 where( 列名=A OR 列名=B) AND 列名>=C。
通常使用and和or时,都应该使用圆括号明确地操作分组操作符。不过分依赖默认计算次序。
IN:
圆括号在WHERE子句中另外一个用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。
select 列名 from 表名 where 类名 IN (A,B) order by 列名;
NOT IN 操作符:
select 列名 from 表名 where 类名 NOT IN (A,B) order by 列名;
第八章:使用通配符进行匹配
什么是、怎么用通配符,怎么用LIKE操作符进行通配匹配。对数据进行复杂过滤。
LIKE操作符:
前面介绍的都是针对已知值进行过滤的。不管是匹配一个还是多个值,测试大于还是小于已知值。使用的值都是已知的。
利用通配符可以创建比较特定数据的搜索模式。
通配符:用来匹配值的一部分的特殊字符。
搜索模式:由字面值、通配符或两者组合构成的搜索条件。
为使用通配符,必须使用LIKE操作符。
LIKE指示mysql,后跟的搜索模式利用通配符匹配的搜索模式而不是直接相等匹配进行比较。
百分号(%)通配符:
表示任何字符出现任意次数。
select 列名 from 表名 where 列名 LIKE ‘jet%’ 找出所有以词jet起头的产品。
通配符可在搜索模式的任意处使用,并且可以使用多个通配符。
LIKE ‘s%e’
LIKE ‘%anvil%’
除了可以匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。
注意:
虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。
即使是 LIKE ‘%’ 也不能匹配匹配用值NULL作为产品名的行。
下划线通配符(_):
总是匹配一个字符,不能多也不能少。
使用通配符的技巧:
1.不要过度使用通配符
2.确实需要时再使用,尽量不要至于搜索模式的开始处,因为这样是非常慢的。
3.注意通配符的位置,放错地方,结果就不对了。
第九章:用正则表达式进行搜索
正则表达式:用来匹配文本的特殊的串(字符集合)。
1.基本字符匹配:REGEXP
LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)。
而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。这是一个差别。
匹配不区分大小写。
2.进行or匹配: |
为搜索2个串之一,使用|,可多次使用
3.匹配几个字符之一:
[abc] 匹配abc中的一个值。 等同 a|b|c
不匹配这些使用[^abc];
4.匹配范围:
[a-z] 可以多重匹配
5.匹配特殊字符:
. 匹配任意字符,因此每行都被检索出来。
为了匹配特殊字符,必须用\ \为前导,\\ - 表示查找- \\ .表示查找.
正则表达式内具有特殊意义的所有字符都必须以这种方式转义。包括. | [ ] 以及各种其他特殊字符。
匹配\:为了匹配反斜杠,字符本身,需要使用\(三个)
多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身,但是mysql要求2个反斜杠。自己解释一个,正则表达式库解释一个。
6.匹配字符类:
类似于POSIX,
[:alnum:] 任意字母和数字
[:alpha:] 任意字符
[:digit:] 任意数字
7.匹配多个实例
重复的元字符
* 0或多个匹配
+ 1个或多个匹配
? 0个或1个匹配(匹配它前面的任何字符的0次或者1次出现)
{n} 指定数目
{n,} 不少于指定数目n
{n,m} 匹配数目的范围
举例: REGEXP ‘[[:digit:]]{4}’ 匹配连在一起的任意4位数字。
类似于 REGEXP ‘[0-9][0-9][0-9][0-9]’
8,定位符:
^ 代表文本的开始
$ 文本的结束
[[:<:]] 词的开始
[[:>:]] 次的结尾