# 一、数据库介绍
## 1.1 什么是数据库?
数据库(database)是用来**组织**、**存储**和**管理数据**的仓库。要想管理数据就需要安装对应的软件:比如我们的excel。
## 1.2 常见数据库
**常用的关系型数据库有**:
(1)MySQL 数据库,目前使用最广泛、流行度最高的开源免费数据库 (甲骨文)
(2)Oracle 数据库,收费 (甲骨文)
(3)SQL Server 数据库,收费 (微软)
以上三种属于传统型数据库,又叫做:关系型数据库 ,这三者的设计理念相同,用法比较类似。
**常用的非关系型数据库有**:
mongodb、redis、memcached
## 1.3 数据库中常见的基础知识:【重点】
1)、数据库、表、数据之间的关系:
数据库 --> 表 -->数据
2)、什么字段、记录?
表中每一列称为字段;
表中第一行数据称为记录;
3)、什么主键?
能唯一代表表中某条记录的列称为主键,主键的值中唯一的。
## 1.4 存储数据的方式
存储数据的方式指的就是数据以什么样的结构进行存储。
### 1.4.1 传统物质分类
整理前:

整理后:

### 1.4.2 excel分类
计算机中的数据,经常使用类似Excel 表的结构进行管理。每个 Excel 中,数据的组织结构分别为工作簿、工作表、数据行、列这 4 大部分组成。如图:


# 二、mysql安装
mysql的安装和配置,请查看 mysql安装.docx
**windows系统下启动、停止mysql数据库:【重点】**
1)、如果我们使用的是"phpstudy"集成工具中的msyql数据库,则使用下面的方式来启动、停止mysql数据库:
双击桌面上的"phpstudy"图标,然后来启动、停止mysql数据库
2)、如果我们使用的是单独通过mysql安装包安装的mysql数据库,则使用下面的方式来启动、停止mysql数据库:
通过windows的服务管理器来启动、停止mysql数据库:
# 三、数据可视化工具
**连接mysql数据库的两种方式:**
**第一种**:通过mysql自带的客户端应用程序mysql.exe来连接msyql数据库,如下:
-h:要连接的主机
-u:帐号
-p:密码

**第二种【重点】**:通过第三方可视化工具navicat来连接mysql数据库,如下:

## 3.1 简介
简介:操作数据库最古老的方式为cmd。这种方式不友好、也不美观,同时无法保存最近的操作命令,数据库可视化工具帮初学者解决了这一系列问题,对初学者非常友好,**数据库可视化工具**有很多,Navicat就是其中的一种,它界面直观、功能强大、操作简单,是市面上最流行的一种数据库可视化工具。
## 3.2 安装navicat
一路敲回车键
## 3.3 使用navicat工具
### 3.3.1 连接数据库

### 3.3.2数据库创建

### 3.3.3 创建数据表
#### 3.3.3.1 常见的数据(字段)类型
1)、字符类型:
char: 通常用来存放某个字段的值的长度是相对固定的。
varchar:通常用来存放某个字段的值的长度是可变的。
text:

2)、数值类型:
tinyint
smallinit:
int
bigint:

#### 3.3.3.2 设计表的规则
设计表时表中的字段类型要根据实际存放值的类型来进行选择,字段类型的长度既满足当前的需求又考虑到将来的扩展性。
## 3.4 管理数据
使用navicat通过鼠标的方式快速的进行 增、删、改、查

## 3.5 备份与还原
# 四、SQL查询语言
## 4.1 简介:
SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
## 4.2 SQL语句特点
不区分大小写
## 4.3 SQL的主要内容
主句:select、insert into、update 、delete
子句:where(and 和 or) 、order by 、group by 、limit、join...on
## 4.4 增删改查
### 4.4.1 添加数据
添加数据语法:
```sql
INSERT INTO 表名[( 字段名1,字段名2,... )] VALUES ('value1','value2',.... )
-- 如果value的值是字符串则必须加 引号
-- 添加数据:insert into 表名[(字段名1,字段名2...)]values('值1','值2'...)
-- insert into class(banhao,banji,teacher)values(6,'python开发','王老师')
-- 等价于上面的sql语句:
-- insert into class values(9,'python开发3','王老师')
-- insert into class(banji,teacher)values('go语言开发','李老师')
```
### 4.4.2 删除数据
删除数据语法:
```sql
DELETE FROM 表名 [WHERE 条件]
-- 注意:不加条件全删除,很危险
-- 删除数据:delete from 表名 [where 条件]
-- 注意:如果省略了where条件时会把表中所有数据给删除掉,要慎重使用
-- 删除班号为7的班级数据:
-- delete from class where banhao=7
-- delete from students
```
### 4.4.3 更新数据
更新(修改)数据语法:
```sql
UPDATE 表名 SET column1 = value1,column2 = value2 ,... [WHERE 条件]
-- 更新数据:update 表名 set 要修改的字段名1='值',要修改的字段名2='值'... [where 条件]
-- 注意:如果省略了where条件时会把表中所有数据给修改掉,要慎重使用
-- 修改班号为8的班级名称为web开发2班,班主任为张老师:
update class set banji='web开发2班',teacher='张老师' where banhao='8'
```
### 4.4.4 查询数据
语法:
```sql
SELECT * FROM 表名 -- *代表所有的列信息都展示
SELECT column1,column2 FROM teacher -- 只展示某些列信息
```
## 4.5 其它子句
### 4.5.1 where 条件
| 运算符 | 描述 |
| ----------- | ------------ |
| = | 等于 |
| != 或者 <> | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| BETWEEN | 在某个范围内 |
| LIKE | 搜索某种模式 |
| AND、OR | 交集、并集 |
语法:
```sql
主句 WHERE column = VALUE
```
```sql
主句 WHERE column BETWEEN VALUE1 AND VALUE2 -- 两边的区间是包含的
```
```sql
主句 WHERE column LIKE 'a%' -- 在某个列中查询以a为开头的数据
主句 WHERE column LIKE '%a' -- 在某个列中查询以a为开头的数据
主句 WHERE column LIKE '%a%' -- 在某个列中查询以a为开头的数据
```
### 4.5.2 order by排序
语法:
```sql
主句 ORDER BY column [ ASC | DESC ]
-- ASC 升序 默认升序
-- DESC 倒序
```
### 4.5.3 group by分组查询、聚合查询
```sql
SELECT *[,聚合函数] FROM 表名 [GROUP BY 字段]
```
count(*) 总数量
min(字段名)
max(字段名)
avg(字段名)
sum(字段名) 求和
### 4.5.4 limit
```sql
SELECT * FROM 表名 [ LIMIT [start,]size ]
```
size:取几条
start: 下标,从哪几个位置开始取
### 4.5.5 join连表查询
```sql
SELECT * FROM 表1 JOIN 表2 ON 连接条件 -- 全连接。 只有on后面的条件成立才会连接。
SELECT * FROM 表1 LEFT JOIN 表2 ON 连接条件 -- 左连接 以左表为基准,左表的数据都会显示
SELECT * FROM 表1 RIGHT JOIN 表2 ON 连接条件 -- 右连接 以右表为基准,右表的数据都会显示
```
## 4.6 补充
解决 ID 不连续:
注意表名替换
```sql
ALTER TABLE 表名 DROP id;
ALTER TABLE 表名 ADD id int NOT NULL FIRST;
ALTER TABLE 表名 MODIFY COLUMN id int NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);
```
select完整语法:
注意顺序
```sql
SELECT 字段名[ 表名.字段名 | 表别名.字段名 | 字段名 AS 字段别名 ] [...]
FROM table_name[as table_alias]
[JOIN table_name2 ON 条件]
[WHERE....]
[GROUP BY....]
[ORDER BY....]
[LIMIT 0,3]
```