一、SQL 通用语法
-
SQL 语句可以单行或多行书写,以分号结尾;
-
SQL 语句可以使用空格/缩进来增强语句的可读性;
-
MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写;
-
注释:单行注释(–或#)、多行注释(/* * /)
二、SQL 的分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库、表、字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
三、DDL
1. 数据库操作
(1) 查询
- 查询所有数据库 show databases;
- 查询当前数据库 select database();
(2) 创建
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
(3) 删除
drop database [if exists] 数据库名;
(4) 使用
use 数据库名;
2. 表操作
(1) 查询
- 查询当前数据库的所有表 show tables;
- 查询表结构 desc 表名;
- 查询指定表的建表语句 show create table;
(2) 创建
create table 表名(
字段1 字段1类型 [comment 字段1注释],
字段2 字段2类型 [comment 字段2注释],
字段3 字段3类型 [comment 字段3注释],
……
字段n 字段n类型 [comment 字段n注释]
) [comment 表注释]
注意:[…]为可选参数,最后一个字段后面没有逗号。
(3) 修改
- 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
- 修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
- 修改字段名和字段类型
alter table 表名 change 旧字段 新字段 类型(长度) [comment 注释] [约束];
- 删除字段
alter table 表名 drop 字段名;
- 修改表名
alter table 表名 rename to 新表名;
(4) 删除
- 删除表
drop table [if exists] 表名;
- 删除指定表,并重新创建表(格式化)
truncate table 表名;
3. 数据类型
- 数字类型
- 字符类型
四、图形化界面
- sqlyog
- navicat
- datagrip
五、DML
1. 添加数据
- 给指定字段添加数据
insert into 表名 (字段名1,字段名2,……)values(值1,值2,……);
- 给全部字段添加数据
insert into 表名 values(值1,值2,……);
- 批量添加数据
insert into 表名 (字段名1,字段名2,……)values (值1,值2,……),(值1,值2,……),(值1,值2,……);
insert into 表名 values(值1,值2,……),(值1,值2,……),(值1,值2,……);
注意:
- 插入数据时,指定的字段顺序需要和值的顺序一一对应;
- 字符串和日期型数据应该包含在引号中;
- 插入的数据大小,应该在字段的规定范围内。
2. 修改数据
update 表名 set 字段名1 = 值1,字段名2 = 值2,……[where 条件];
注意 修改语句的条件可以有,也可以没有,如果没有条件,则整张表的数据都会被修改。
3. 删除数据
delete from 表名 [where 条件]
注意
- delete 语句的条件可以有,也可以没有,如果没有条件,则整张表的数据都会被删除。
- delete 语句不能删除某一个字段的值。(可以使用 update)
六、DQL
1. 语法结构
关键字 | 后面所跟内容 |
---|---|
select | 字段列表 |
from | 表名列表 |
where | 条件列表 |
group by | 分组字段列表 |
having | 分组后条件列表 |
order by | 排序字段列表 |
limit | 分页参数 |
2. 基本查询
- 查询多个字段
select 字段1,字段2,…… from 表名;
select * from 表名;
- 设置别名
select 字段1 [as 别名],字段2[as 别名2]……from 表格;
- 去除重复记录
select distinct 字段列表 from 表名;
3. 条件查询
- 语法
select 字段列表 from 表名 where 条件列表;
- 条件
4. 聚合函数
将一列数据作为一个整体,进行纵向运算。
select 聚合函数(字段列表)from 表名;
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
注意 null 值不参与聚合函数的运算
5.分组查询
- 语法
==select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
-
where 与 having 区别
-
执行时机不同:where 是分组之前进行过滤,不满足 where 条件,不参与分组;而 having 是分组之后对结果进行过滤;
-
判断条件不同:where 不能对聚合函数进行判断,而 having 可以。
6. 排序查询
- 语法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
- 排序方式
ASC:升序(默认值);DESC:降序
注意 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段排序。
7. 分页查询
- 语法
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意
- 起始索引从零开始,起始索引 = (查询页码 - 1)* 每页显示记录数;
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL 中是 LIMIT。
- 如果查询的是第一页数据,其实索引可以省略,直接简写为limit10;
8. 执行顺序
from ==> where ==> group by ==> having ==> select ==> order by ==> limit
七、DCL
1. 管理用户
- 查询用户
use mysql;
select * from user;
- 创建用户
create user ‘用户名’@‘主机名’ identified by ‘密码’;
- 修改用户密码
alter user ‘用户名’@‘主机名’ identified with mysql_native_password by ‘新密码’;
- 删除用户
drop user ‘用户名’@‘主机名’;
注意
- 主机名可以使用 % 通配;
- 这类 SQL 开发人员操作得比较少,主要是 DBA(Database Administrator)使用。
2. 控制权限
- 查询权限
show grants for ‘用户’@‘主机名’;
- 授予权限
grant 权限列表 on 数据库.表名 to ‘用户名’@‘主机名’;
- 撤销权限
revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
注意
- 多个权限之间,使用逗号分隔;
- 授权时,数据库名和表名可以使用 * 进行通配。