1. 数据库概述
1.1 SQL
SQL的全程是 Structured Query Language,用来完成和数据库的通信,SQL是一套标准,不只限于操作MySQL,绝大部分关系性数据库都可以使用SQL进行操作。
1.2 数据库
数据库通常是一组或者一个文件,保存了一些符合特定规格的数据,称为Database,简称DB;
1.3 数据库管理系统
数据库管理系统:DataBaseMangement,简称DBMS,用来专门管理数据库中数据的。
1.4 关系型数据库(RDBMS)
建立在关系模型的基础上,由多张互相链接的二维表组成的数据库。
如图中:员工表通过dept_id
字段和部门表中的id
字段相关联。
优点:
- 使用表存储数据,格式统一,便于维护;
- 使用SQL语言操作,标准统一,使用方便。
1.5 数据模型
服务端通过DBMS来操作数据库。
1.6 MySQL 数据类型
1.6.1 数值型
1.6.2 日期和时间类型
1.6.3 字符串类型
2. SQL
SQL语法:
- 可以多行和单行,以分号
;
结尾; - 对空格和缩行没有特殊要求;
- 不区分大小写;
- 注释:
①单行注释:--
或#
②多行注释:/* */
声明 :下方代码中的 [ ] 指的是自己传入的名称,在真正写代码时不需要写。
2.1 DDL
Data Definition Language 数据定义语言,用来定义数据库对象。
show databases;
:查询所有数据库;select database()
:查看当前数据库;create database db_name
:创建数据库;drop database db_name
:删除数据库;use db_name
:使用数据库;alter table [表名] add [字段名称] [类型(长度)]
:添加字段;alter table [表名] change [旧字段名称] [新名称] [类型(长度)]
:修改字段;alter table [表名] drop [字段名]
:删除字段;alter table [表名] rename to [新名]
:修改表名;drop table [表名]
:删除表;truncate table [表名]
:删除表之后再重新创建。
2.2 DML
Data Manipulaiton Language 数据操作语言,用来对数据表中的数据进行增删改。
2.2.1 插入数据
- 给指定字段添加数据
insert into [表名] (字段1,字段2,字段3...) values (值1,值2,值3...);
- 给全部字段添加数据
insert into [表名] into (值1,值2,值3...);
- 批量添加数据
insert into [表名] (字段1,字段2,字段3...) values (值1,值2,值3...) ,(值1,值2,值3...),(值1,值2,值3...);
insert into [表名] into (值1,值2,值3...),(值1,值2,值3...),(值1,值2,值3...);
2.2.2 更新数据
一般在最后使用
where
关键字来指定要修改的行,不指定就修改全部数据。
update [表名称] set 字段1 = 值1, 字段2 = 值2 ...
2.2.3 删除数据
一般在最后使用
where
关键字来指定要删除的行,不指定就删除全部数据。
delete from [表名]
2.3 DQL
Data Query Language 数据查询语言,用来查询数据库中表的记录。
2.3.1 基本语法
select [字段1,字段2,字段3...] from [表名]
- 查询全部字段
select * from [表名]
- 设置别名
select [字段1] as [别名1] ... from [表名]
- 去重记录
select distinct [字段] from [表名]
2.3.2 条件查询
select [字段1,字段2,字段3...] from [表名] where [条件1,条件2...];
常见条件:
2.3.3 聚合函数
将一列数据作为一个整体,进行纵向计算。
常见聚合函数:
count()
统计数量;max()
:最大值;min()
:最小值;avg()
:平均值;sum()
:求和。
用法:
select [集合函数(字段)] from [表名];
2.3.4 分组查询
select [字段1,字段2,字段3...] from [表名] group by [分组字段名] having [分组过滤条件];
having
与where
的区别:
- 执行时机不同:
where
是分组之前进行过滤,不满足where
的条件,不参与分组;having
是分组之后对结果进行过滤; - 判断条件不同:
where
不能对聚合函数进行判断,having
可以。 - 执行顺序:
where
- 聚合函数 -having
2.3.5 排序查询
select [字段1,字段2,字段3...] from [表名] order by [字段1] [排序方式1], [字段2] [排序方式2] ... ;
排序关键字:
ASC
:升序(默认);DESC
:降序。
多字段排序时,只有第一个字段值相同才会根据第二个字段排序。
2.3.6 分页查询
select [字段1,字段2,字段3...] from [表名] limit [起始索引],[查询记录数] ;
- 起始索引从0开始,为0可以省略;
例如:查询前 10 条记录;
select * from tb_name limit 10;
- 查询其它页时:起始索引 = (页码 - 1) * 分页数量,可以简单的理解为从第 n条数据(不包含)开始查询 m 条(包含)。
例如:查询第三页的 10 条数据:
select * from tb_name limit 20,10;
2.3.6 执行顺序
2.4 DCL
Data Control Language 数据控制语言,用来创建用户、控制数据库的访问权限。
2.4.1 用户管理
- 查询用户:
use mysql;
select * from user;
- 创建用户:
主机名:在哪台主机可以访问数据库%
代表全部主机。
create user '用户名'@'主机名' identified by '密码';
- 修改用户密码
alter user 用户名'@'主机名' identified with mysql_native_password by '密码';
- 删除用户
drop user '用户名'@'主机名';
2.4.2 权限控制
使用all
可以表示全部权限,使用*
可以表示全部的数据库或表。
常见权限:
- 查询权限:
show grants for '用户名'@'主机名';
- 授予权限:
grant [权限1,权限2...] on [数据库名].[表名] to '用户名'@'主机名';
- 撤销权限:
revoke [权限1,权限2...] on [数据库名].[表名] from '用户名'@'主机名';