MySQL是一个轻量级关系型数据库管理系统,由于体积小、速度快、总体拥有成本低,开放源码、免费,一般中小型网站的开发都选择Linux + MySQL作为网站数据库。
数据库的基本概念
数据库 DataBase 简称:DB
什么是数据库
- 用于存储和管理数据的仓库
数据库的特点
- 持久化存储数据,其实数据库就是一个文件系统
- 方便存储和管理数据
- 使用统一的方式操作数据库
常见的数据库软件
- MySQL:开源免费的数据库,小型的数据库,已经被 Oracle 收购了。 MySQL6.x 版本也开始收费。后来Sun公司收购了 MySQL,而 Sun 公司又被 Oracle 收购
- Oracle:收费的大型数据库, Oracle 公司的产品
- DB2 : IBM 公司的数据库产品,收费的。常应用在银行系统中。
- SQL Server: MicroSoft 公司收费的中型的数据库。 C#、 .net 等语言常使用。
- SQLite: 嵌入式的小型数据库,应用在手机端,如: Android
MySQL数据库的优点
- MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。目前MySQL被广泛地应用在Internet上的中小型网站中,由于体积小、速度快、总体拥有成本低,开放源码、免费,一般中小型网站的开发都选择Linux + MySQL作为网站数据库。
- MySQL是一个关系型数据库管理系统,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,就增加了速度并提高了灵活性。
注:为什么使用数据库存储文件
| 存储位置 | 优点 | 缺点 |
|---|---|---|
| 内存 | 速度快 | 不能永久保存,数据是临时状态 |
| 文件 | 数据可以永久保存 | 操作数据不方便,不便于管理 |
| 数据库 | 1.数据可以永久保存 2.查询速度快 3.对数据的管理方便 |
占用资源,需要购买 |
数据库的安装与卸载,配置
我们安装MySQL其实安装的是MySQL的服务器软件,他会在windows的注册列表里注册MySQL的服务(service),服务就是一些没有界面的应用程序
查看服务 cmd—> services.msc

关闭mysql服务 net stop mysql

开启mysql服务 net start mysql

数据库的连接
本地数据库的连接

远程数据库的连接 mysql -h远程的ip地址 -uroot -p 远程的密码

mysql —host=连接的ip —user=root —password=_

数据库的退出

注:以上关闭和开启都需要在管理员的模式下
并且上述服务的名称必须和你的服务名称相同 当你的服务名称是mysql1,那么后面就需要的是mysql1
MySQL的目录结构
安装目录
配置文件my.ini

数据目录 上图中的data目录 建议不要将data目录与安装目录放在一起
1 数据库—-> 文件夹
2 表—-> 文件
3 数据—-> 数据
MySQL数据库基础中的数据库,表,数据的关系

- MySQL服务器:安装MySQL服务的电脑
SQL
什么是SQL
SQL = Structured Query Language 结构化查询语言
其实就是定义了操作所有的关系型数据库的规则
——-> 关系型数据库必须遵守SQL
每一种数据库操作的方式存在不一样的地方称为”方言”SQL通用语法
SQL语句可以单行或多行书写,以分号结尾
在这里输入的语句才是SQL语句
以分号结尾:
可使用空格和缩进来增强语句的可读性
MySQL数据库基础的SQL语句不区分大小写,但是关键字建议使用大写

3种注释
单行注释
‘— 注释内容’
‘# 注释内容’—>MySQL特有
- 注意空格

2.
多行注释
-
‘/ 注释 /‘

SQL的分类
Data Definition Language (DDL 数据定义语言) 如:建库,建表
Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
Data Query Language(DQL 数据查询语言),如:对表中的查询操作
Data Control Language(DCL 数据控制语言),如:对用户权限的设置
- 分类及对应的作用

DDL:操作数据库、表
操作数据库:CRUD(增删改查)
C: Create 创建
创建数据库 create database 数据库名称;

如果数据库不存在才进行创建数据库

创建指定字符集的数据库

R: Retrieve 查询
查看所有的数据库名称

show create database 数据库名称;
- 查询创建数据库MySQL的语法
- 查看数据库对应的字符集,这里是utf-8

U: Update 修改
- 修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
注: 当修改成字符集UTF-8的时候输入的应该是UTF8;
- 修改数据库的字符集
D: Delete 删除
删除数据库

判断存在再删除

使用数据库
上面的操作都是在数据库之外 也就相当于在下面的目录中
只有进入到相应的数据库的文件夹才可以对其中的文件进行操作

查询当前正在使用的数据库名称 select database();
并对相应的数据库进行使用 use 数据库名称;
这样就相当于我们进入了db1文件夹
操作表
C: Create 创建
- 语法
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
列名3 数据类型3,
… …
列名n 数据类型n
);
注:最后一列不需要加”,”
- 语法
| 类型 | 英文 |
|---|---|
| 整数类型 | int |
| 小数类型 | double(小数的位数,保留的位数) |
| 日期类型 | date: 只包含年月日,yyyy-MM-dd datetime: 包含年月日时分秒,yyyy-MM-dd HH:mm:ss timestamp: 时间戳类型 包含年月日时分秒,yyyy-MM-dd HH:mm:ss |
| 字符串类型 | varchar(最大长度) |
timestamp: 如果这个字段不手动赋值的话,或者赋值为null,那么就会使用当前系统默认的时间,来自动赋值
varchar(最大长度),其中的长度是以字符为单位的,zhangsan 8个字符,张三 2个字符

- 复制一张表 create table 表名 like 被复制表名;

- R: Retrieve 查询
查询某个数据库中的所有的表的名称 show tables;

查询表结构 desc 表名;

- U: Update 修改
修改表名 alter table 表名 rename to 新的表名

修改表的字符集 alter table 表名 character set 字符集名称;

添加一列 alter table 表名 add 列名 数据类型;

修改列的名称 类型
- 修改列的列名和类型 alter table 表名 change 列名 新的列名 新的类型 ;

- 只修改列的类型 alter table 表名 modify 列名 新的类型;

- 删除列 alter table 表名 drop 列名;

- D: Delete 删除
drop table 表名;
drop table if exists 表名;

- 客户端图形化工具 : SQLyog

DML: 增删改表中的数据
添加数据
基本语法
insert into 表名(列名1,列名2,…列名n) values(值1,值2,…值n);
注意:
列名和值要一一对应
如果表名后,不定义列名,则默认给所有列添加值

除了数字类型,其他类型都需要用引号(单双均可)

删除数据
- 语法
delete from 表名 [where 条件成立]
truncate table 表名; —>删除表 然后创建一个一模一样的空表

注意:
- 当没有WHERE条件的时候 delete会将表中的所有的数据删除
删除所有的数据
- delete from 表名; — 不推荐使用 ,有多少条数据执行多少次删除操作
- truncate table 表名; —删除表 然后创建一个一模一样的空表 这条语句就相当于只执行了 drop table; create table ; 两条语句 效率更高
修改数据
语法
update 表名 set 列名1 = 值1 , 列名2 = 值2,…. [where 条件];
注意
- 如果没有where条件 那么表中的所有的数据都会被修改
DQL: 查询表中的数据
语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定基础的查询
多个字段的查询

2. 去除重复

- 当去除重复的字段是多个的时候,所有的字段的值都必须相同才能去除

- 计算列

- 但是上述的null 计算的结果不合理,
- 因为在含有null参与的运算中,计算结果都是null
ifnull(exp1,exp2)函数 —-> 如果exp1为null,就替换为exp2

起别名

- 当然 在列名后面 添加空格 然后添加别名也是可以的

- 当然 在列名后面 添加空格 然后添加别名也是可以的
条件查询
where子句后面跟条件
运算符
- <、>、<=、>=、=、<>(不等于)

- SQL中的等于就是 = ,一个等于号


- BETWEEN…AND
- between A and B 包含A和B

IN(集合)

LIKE(模糊查询)
占位符
- _ : 单个任意字符
- % : 多个任意字符

IS NULL
- NULL值不可以用基本运算符运算

- AND 或者 && (与)

- OR 或者 || (或)

- NOT 或者 ! (非)

- 排序查询
语法: order by 子句;
- order by 排序字段1 排序方式1 , 排序字段2 排序方式2,….;
排序方式
- ASC : 升序 —- > ascend
- DESC: 降序 —- > descend
排序方式默认的是升序
多个字段的排序 靠前的是主排序,靠后的为次排序 当主排序相同的时候,才会使用次排序

- 上图中 主排序是数学升序 ,当数学成绩相同的时候 ,使用英语成绩降序为次排序
- 聚合函数: 将一列数据作为整体,进行纵向的计算
注: 聚合函数的计算会排除NULL值
- 选择不包含NULL的列进行计算
- IFNULL函数

count : 计算数量,个数
一般选择没有NULL的列 : 主键

count(*)

- count(*) 代表只要一条数据中有一列不是NULL,都算作一条数据
max : 计算最大值

min : 计算最小值

sum : 计算和

avg : 计算平均值

分组查询
语法: group by 分组字段;
注意:
分组之后查询的字段必须是 分组字段或者聚合函数

where 和 having 的区别
- where 在分组之前进行条件的限定 如果不满足条件 ,则不参与分组
- having 在分组之后进行限定 如果不满足结果, 则不会被查询出来
- where后不可以跟聚合函数
- having后可以进行聚合函数的判断

-
给聚合函数起别名 后面可以用来进行查询

- 分页查询
语法: limit 开始的索引 , 每页查询的条数;

- 表中的数据的索引从0开始
**公式: 开始的索引 = (当前的页码 - 1) 每页显示的条数

当数据不够的时候,会将剩下的所有的数据都显示出来
LIMIT是MySQL数据库基础的”方言”
