1. 通识
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以单独使用空格/缩进来增强语句的可读性。
- Mysql数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释:
- 单行注释:-- 注释内容 或 # 注释内容
- 多行注释:/*注释内容*/
2. 分类
分类 | 概述 | 说明 |
DDL(Data Definition Language) | 数据定义 | 定义(创、删)数据库对象(数据库,表,字段) |
DML(Data Manipulation Language) | 数据操作 | 对数据库表中的数据进行增删改 |
DQL(Data Query Language) | 数据查询 | 查询数据库中表的记录 |
DCL(Data Control Language) | 数据控制 | 创建数据用户,控制数据库的访问权限 |
3. DDL-定义
3.1 库管理
3.1.1 创建数据库
create database 数据库名 [charset UTF8];
3.1.2 删除数据库
drop database 数据库名;
3.1.3 查看所有数据库
show databases;
3.1.4 查看当前使用的数据库
select datanase;
3.1.5 切换数据库
use 数据库名;
3.1.6 退出数据库
exit databaes 数据库名;
3.1.7 删除数据库
drop databaes 数据库名;
3.2 表管理
3.2.1 创建表
create table 表名(
列1名称 列1类型,
列2名称 列2类型,
......
);
列类型:int 整数;float 浮点数;varchar 字符串;date 日期类型......
3.2.2 查看所有表
show table;
3.2.3 表添列
alter table 表名 add 字段名 类型(长度);
3.2.4 修改列类型
alter table 表名 modify 字段名 新数据类型(长度);
3.2.5 修改列名和类型
alter table 表名 change 旧字段名 新字段名 类型(长度) ;
3.2.6 删除列
alter table 表名 drop 字段名;
3.2.7 修改表名
alter table 表名 rename to 新表名;
3.2.8 删除表
drop table 表名;
3.3 总结
create
创建
show
查看
alter
修改
drop
删除
4. DML-操作
4.1 增-insert into
4.1.1 全部列插入数据
insert into 表名 values(值1,值2,...);
4.1.2 指定列插入数据
insert into 表名 (列1,列2,..) values (值1,值2,...);
4.1.3 批量插入数据
insert into 表名 (列1,列2,...) values (值1,值2,...),(值1,值2,...);
insert into 表名 values (值1,值2,...),(值1,值2,...);
4.2 删 -delete
4.2.1 删除全表数据
delete from 表名;
4.2.2 按条件删除数据
delete from 表名 [where 条件];
4.3 改-update
4.3.1 普通更新
update 表名 set 列1=值1,列2=值2,...;
4.3.2 按条件更新
update 表名 set 列1=值1,列2=值2,...[where 条件];
4.4 总结
insert into
value
delete
where
updata
set
5. DQL-查询
5.1 查-select
5.1.1 普通查询
select * from 表名 ; # 全表查询
select 列1,列2,... from 表名; # 指定列查询
select 列名 from 表名 where 条件; # 条件查询
select 列1 [ as 别名1 ] , 列2 [ as 别名2 ] ... from 表名; # 别名查询
或
select 列1 [ 别名1 ] , 列2 [ 别名2 ] ... from 表名;select distinct 列名 from 表名; # 去除重复记录
5.1.2 分组聚合
运用场景:统计班级中,男生和女生人数
select 聚合函数 from 表名 [ where 条件 ] group by 列
聚合函数:
- sum(列) - 求和;
- avg(列) - 求均值;
- max(列) - 求最大值;
- min(列) - 求最小值;
- count(列) - 求数量......
5.1.3 分组聚合过滤
select 聚合函数 from 表名 [where 条件] group by 分组字段名 having 分组后过滤条件;
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
5.1.4 排序
- asc:升序(默认值)
- desc:降序
select 列名| 聚合函数| * from 表名 order by 列1[ asc | desc ];
5.1.5 分页
select 列名| 聚合函数| * from 表名 limit 起始索引,查询记录数;
注意事项:
- 起始索引从0开始,起始索引=(查询页码-1) * 每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是limit。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10;
5.2 总结
# 执行顺序
select
列名| 聚合函数| *
from
表名
where
条件
group by
聚合
having
聚合后条件
order by
排序
limit
分页
6. DCL-控制(了解)
6.1 管理用户
select * from myspl.user;
查询结果含义:
- Host:当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问,是不可以 远程访问的。
- User:访问该数据库的用户名。在MySQL中需要通过Host和User来唯一标识一个用户。
6.2 权限控制
6.2.1 查询权限
show grants for '用户名'@'主机名';
6.2.2 授予权限
grants 权限列表 on 数据库名.表名 to '用户名'@'主机名';
6.2.3 撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'
注意事项:
- 多个权限之间,使用逗号‘,’分隔;
- 授权时,数据库名和表名可以使用 * 进行通配,代表所有。
权限 | 说明 |
all,all privileges | 所有权限 |
select | 查询权限 |
insert | 插入权限 |
update | 修改数据 |
delete | 删除数据 |
alter | 修改表 |
drop | 删除数据库/表/视图 |
create | 创建 |