Mysql基础部分总结

一、数据库的好处

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标准:仅支持内连接
语法:

select1【别名1.字段,2【别名2.字段 
from1 【别名1,2 【别名2where 连接条件
and 筛选条件;

特点:1、多表等值连接的结果为多表的交集部分
2、n表连接则至少需要n-1个连接条件
3、多表的顺序没有要求
4、一般需要为表起别名
5、可以搭配前面介绍的子句使用,比如:排序、分组、筛选等
需要注意的是:一旦为表起了别名,那么在需要使用表名的时候都需要使用别名去替代

SQL99标准:支持内连接、外连接等
语法:

select 查询列表
 from1 as 别名1
 【连接类型】join2 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)来作为索引,那么我们最好使用其前缀来作为索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值