文章目录
一、数据库的好处
1、可以持久化数据到本地
2、可以进行结构化查询
二、数据库的常见概念
1、DB(Database):数据库,存储数据的容器
2、DBMS(Data Manage System):数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理数据库(DB)
3、SQL:结构化查询语言,用于和数据库通信的语言,它不是某个数据库软件所特有的,而是机会所有的主流数据库软件通用的语言。
三、数据库存储数据的特点
1、数据存放到表中,然后表再存放到库中
2、一个库中可以存放多张表,每张表具有唯一的表命来标识自己
3、表中有一个列或者多个列,列又称为“字段”,相当于Java中的属性
4、表中的每一行数据相当于Java中的对象
四、常见的数据库管理系统
Mysql、SQL sever、Oracle、db2等
五、MySQL的介绍
一、MySQL的背景
其前身属于瑞典的一家公司,2008年被sun公司收购,2009年sun公司又被Oracle收购
二、MySQL的优点
1、开源、免费、成本低
2、性能高、移植性也好
3、体积小便于安装
三、MySQL的安装
MySQL属于C/S架构的软件,既有服务端,又有客户端,一般来讲安装客户端
四、MySQL服务的停止和启动
方式一:通过命令行
启动:net start 服务名
停止:net stop 服务名
方式二:计算机(右击)——管理——服务
六、DQL语言
基础查询:select 查询列表 from 表名
特点:1、查询列表可以是字段、常量值、表达式、函数等,也可以是多个字段
2、查询结果是一个虚拟表
条件查询:select 查询列表 from 表名 where 筛选条件
筛选条件的分类:
1、简单的条件运算符:
> < = <> != >= <= <=>
2、逻辑运算符
&& and
|| or
! not
模糊查询:
like:一般搭配通配符使用,用于判断字符型或数值型
通配符:% 表示任意多个字符 _ 表示任意单个字符
排序查询:
select 查询列表
from 表名 【where筛选条件】
order by 排序列表 【asc/desc】 //如果不写则默认升序
特点:1、asc代表升序 desc代表降序
2、order by 子句一般放在查询语句的最后面,但limit子句除外
3、order by 子句支持单个字段、多个字段、表达式、函数、别名
分组查询:
select 分组函数,列(要求出现在group by的后面)
from 表
【where 筛选条件】
group by 分组的列表
【having 筛选条件】
【order by子句】;
特点:1、分组查询中筛选条件分为分组前筛选(where)与分组后筛选(having)
2、能用分组前筛选优先考虑使用分组前筛选(性能问题)
连接查询:
含义:又称多表查询,当查询的字段来自于多张表时,就会用到连接查询
笛卡尔乘积现象:表1有m行,表2有n行,如果不加连接条件进行查询,则结果会出现 m * n 行
按时间分类:
SQL92标准:仅支持内连接
语法:
select 表1【别名1】.字段,表2【别名2】.字段
from 表1 【别名1】,表2 【别名2】
where 连接条件
and 筛选条件;
特点:1、多表等值连接的结果为多表的交集部分
2、n表连接则至少需要n-1个连接条件
3、多表的顺序没有要求
4、一般需要为表起别名
5、可以搭配前面介绍的子句使用,比如:排序、分组、筛选等
需要注意的是:一旦为表起了别名,那么在需要使用表名的时候都需要使用别名去替代
SQL99标准:支持内连接、外连接等
语法:
select 查询列表
from 表1 as 别名1
【连接类型】join 表2 as 别名2
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
内连接:使用 inner
左外连接:使用 left outer
右外连接:使用 right outer
内连接介绍:
1、添加分组、排序、筛选
2、inner可以省略
3、筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
4、 inner join连接和SQL92语法中的等值连接效果是一样的,都是查询多表的交集
外连接介绍:
1、外连接的查询结果为主表中的所有记录,如果从表中有它匹配的,则显示匹配的值,如果从表中没有和它匹配的,则显示null值
外连接查询结果 = 内连接结果 + 主表中有而从表中没有的记录
2、左外连接:left join 左边的是主表
右外连接:right join 右边的是主表
子查询:出现在其他语句中的 select 语句,称为子查询或内查询,
可以使用的操作符如:> , < , >= , <=, = , <> , in , not in , any/some , all 等
特点:1、子查询放在小括号内
2、子查询一般放在条件的右侧
3、子查询的执行优先于主查询的执行,主查询的条件用到了子查询的结果
放在exits后面的查询:exits(完整的查询语句)
结果:1 或 0
七、函数介绍:
功能:类似于Java中的方法,将一组逻辑语句封装好,对外提供方法名
好处:1、隐藏了实现细节
2、提高代码的重用性
分类:1、单行函数 如 length、ifnull等
2、分组函数,又称为统计函数、聚合函数、组函数,作统计使用
八、编码问题:
一般情况下,MySQL的默认编码形式为Latin1,但有时候当我们需要处理中文字符的时候,Latin1这种编码形式就不能正确的处理了。这时我们就需要根据具体的需求来改变默认的编码形式,以下列举出五种改变编码形式的方法
方法1:给 varchar/char 前面加上 n ,只改变当前属性的编码形式(只适用于varchar/char)
方法2:在相应的属性后面加上character set utf8
方法3:对已经创建好的表上的字段进行修改
示例:create table tb_sex( Ssex enum('m','w') ); 改变方式:alter table_sex modify Ssex enum('男','女') character set utf8;
方法4:在创建表的时候直接在表尾进行设置,这样就将表中所有字段的属性都改变了(改变了整张表的编码形式)
create table tb_name(
name varchar(10)
) charset = utf8;
方法5:改变整个数据库的编码形式(需要新建数据库,因为原来创建的数据库还是用的是原来的编码形式)
改变MySQL的配置文件 —— my.ini,将Latin1改为utf8
因为这个配置文件是只在MySQL服务启动时读取的,所以改变后需要重启MySQL服务,并且还得新建一个数据库(原来建的数据库还是使用的改变之前的编码形式)
九、存储引擎:
MySQL支持不同的存储引擎,主要使用的有MyISAM和InnoDB,有时候我们需要根据具体的需求来选择合适的存储引擎,以下列举出两种改变存储引擎的方法
方法1:在表尾进行修改,示例:
create table test(
name varchar(10)
)engine=MyIsam;
方法2:改变MySQL的配置文件 —— my.ini,将InnoDB改为MyIsam,类似于在配置文件中修改字符编码形式的方法,找到对应的位置进行修改,之后要重启MySQL服务并新建一个数据库
十、MySQL索引
索引的简介
索引是创建在表上的,是对数据库表中一列或者多列的值进行排序的一种结构。如果将MySQL中的一张表比喻成一本书的话,那么索引就可以看作是这本书的目录。我们可以轻松的通过索引来从表中查询到想要的信息,正确的使用索引能够大大提高L查询数据的效率。通过索引,查询数据的时候可以不读完全部的信息,而是仅仅查询索引列。不同的存储引擎定义了每个表的最大索引数目和最大索引长度。所有存储引擎对每个表至少支持16个索引,总索引长度为256个字节。索引有两种存储类型,包括 b 型树索引和哈希索引。InnoDB存储引擎与MyISAM存储引擎都支持BTREE索引,MEMORY存储引擎支持HASH索引和BTREE索引,默认为HASH索引。
索引的优点:
①:提高检索数据的速度,这是创建索引最主要的原因
②:对于有依赖关系的子表和父表之间的联合查询时,可以提高查询速度
③:使用分组和排序子句进行查询时,同样可以显著节省查询中分组和排序的时间
索引的缺点:
①:创建和维护索引需要耗费时间,耗费时间的量随着数据量的增加而增加
②:索引需要占据一定的物理空间
③:增加、删除、修改数据时,要动态的维护索引,这使得数据的维护速度降低了
索引的分类
1.普通索引
创建普通索引时,不用附加任何条件。这类索引可以创建在任何数据类型中,其值是否唯一和非空由字段本身的完整性约束条件决定。
例子:
①:创建表的时候创建索引
create table ss(
id int,
name varchar(10),
index index_1(id)
);
②:在已经存在的表上建立索引
create index index_11 on ss(name);
③:用alter语句来创建索引
alter table ss add index index1_1(id);
2.唯一性索引
使用UNIQUE参数能够将索引设置为唯一性索引。唯一性索引限制了该索引的值必须是唯一的。
例子:
①:在创建表的时候创建索引
create table ss1(
id int unique,
name varchar(10),
unique index_2(id)
);
②:在已经存在的表上建立索引
create unique index index_22 on ss1(name);
③:用alter语句来创建索引
alter table ss1 add unique index index2_2(name);
3.全文索引
使用 FULLTEXT 参数可以将索引设置为全文索引。全文索引只能创建在CHAR、VARCHAR、TEXT类型的字段上。查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。
例子:
①:创建表的时候创建索引
create table ss2(
id int,
name varchar(10),
fulltext index index_3(name)
);
②:在已经存在的表上建立索引
create fulltext index index_33 on ss2(name);
③:用alter语句来创建索引
alter table ss2 add fulltext index index3_3(name(5));
4.单列索引
在表中的单个字段上创建索引,单列索引只根据该字段进行索引,可以是普通索引,也可以是唯一性索引,还能是全文索引,只需要保证该索引只对应一个字段即可。
例子:
①:创建表的时候创建索引
create table ss3(
id int,
name varchar(10),
index index_4(name(5))
);
②:在已经存在的表上建立索引
create index index_44 on ss3(id);
③:用alter语句来创建索引
alter table ss3 add index index4_4(id);
5.多列索引
多列索引是在表的多个字段上创建一个索引。该索引对应多个字段,可以通过这几个字段进行查询。但是只有查询条件中使用了这些字段的第一个字段时,该多列索引才会被使用。
例子:
①:创建表的时候创建索引
create table ss4(
id int,
name varchar(10),
sex char(3),
index index_5(name,sex)
);
②:在已经存在的表上建立索引
create index index_55 on ss4(id,sex);
③:用alter语句来创建索引
alter table ss4 add index index5_5(id,name);
6.空间索引
使用SPATIAL参数可以将索引设置为空间索引,该类索引只能建立在空间数据类型上,能够提高系统获取空间数据的效率。
例子:
①:创建表的时候创建索引
create table ss5(
id int,
space geometry not null,
spatial index index6(space)
);
②:在已经存在的表上建立索引
create spatial index index_66 on ss5(space);
③:用alter语句来创建索引
alter table ss5 add spatial index index6_6(space);
索引的设计原则
1.选择唯一性索引
唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。
2.为经常需要排序、分组和联合操作的字段建立索引
可以为经常需要 order by、group by、DISTINCT 和 UNION 等操作的字段建立索引。排序操作会浪费时间,如果为其建立索引,可以有效的避免排序操作
3.为常作为查询条件的字段建立索引
如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。所以,为这样的字段建立索引,可以提高整个表的查询速度。
4.限制索引的数目
索引的数目并不是越多越好。每个索引都需要占据磁盘空间,索引越多,那么所需要的磁盘空间就越大。并且在修改表时,对索引的更新和重构就会越耗时,可能会浪费不必要的时间。
5.尽量使用数据量少的索引
如果索引的值很长,那么查询速度也就会随之变慢。
6.尽量使用前缀来索引
如果一定要使用一些数据量大的字段(如TEXT、BLOG)来作为索引,那么我们最好使用其前缀来作为索引。