文章目录
一、概述
SQL(Structured Query Language),即结构化查询语言,是用于管理关系数据库(如 MySQL)的标准语言。
SQL 主要包括以下几类操作:
分类 | 全称 | 含义 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,定义数据库对象(数据库、表、字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库的数据进行增、删、改操作 |
DQL | Data Query Language | 数据查询语言,用来查询数据库数据的操作 |
DCL | Data Control Language | 数据控制语言,用来控制数据库的访问权限和用户权限 |
二、前置
2.1 约束
约束是用来约束表中字段的规则,作用是确保数据库中数据的完整性和一致性。
约束 | 含义 | 关键字 |
---|---|---|
非空约束 | 字段的值不能为null | not null |
唯一约束 | 字段的值是唯一,且不重复的 | unique |
主键约束 | 字段的值非空,且唯一 | primary key |
默认约束 | 如果字段没有值,则采用默认值 | default '默认值' |
外键约束 | 让两张表建立连接 | foreign key |
2.2 数据类型
MySQL 的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
菜鸟教程:https://www.runoob.com/mysql/mysql-data-types.html
2.3 条件
条件用于查询、修改和删除操作,作用是筛选出符合特定条件的数据。
比较运算符
运算符 | 含义 |
---|---|
= | 等于 |
!= 或 <> | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
逻辑运算符
运算符 | 含义 |
---|---|
and 或 && | 并且,多个条件同时满足 |
or 或 || | 或者,多个条件满足其一 |
not 或 ! | 非,否定一个条件 |
范围条件
运算符 | 含义 |
---|---|
between … and … | 指定一个值的范围,包括边界值 |
in | 匹配一组值中的任何一个 |
模糊匹配
like:用于模式匹配。% 表示任意字符序列(包括空字符序列),_ 表示任意单个字符。
例如:
- SELECT * FROM user WHERE name LIKE ‘J%’; (以 ‘J’ 开头的名字)
- SELECT * FROM user WHERE email LIKE ‘%@gmail.com’; (以 ‘@gmail.com’ 结尾的邮箱)
空值判断
运算符 | 含义 |
---|---|
is null | 判断是否为 null 值 |
is not null | 判断是否不为 null 值 |
这些条件可以根据具体的需求组合使用,实现复杂的数据筛选。
三、DDL
操作数据库
-- 查询所有数据库
SHOW DATABASES;
-- 查询当前的数据库
SELECT DATABASE();
-- 创建数据库,中括号中的内容是可选的
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
-- 删除数据库,中括号中的内容是可选的
DROP DATABASE [IF EXISTS] 数据库名;
-- 使用数据库
USE 数据库名;
操作表
-- 创建表,注意表的最后一个字段是没有逗号的,中括号中的内容是可选的
CREATE TABLE 表名 (
字段1 字段类型 [约束] [comment 字段1注释],
......
字段n 字段类型 [约束] [comment 字段n注释]
) [comment '表注释'];
-- 查询当前数据库的所有表
SHOW TABLES;
-- 查询表的结构
DESC 表名;
-- 查询表的建表语句
SHOW CREATE TABLE 表名;
-- 新增一个字段,中括号中的内容是可选的
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
-- 修改字段的数据类型
ALTER TABLE 表名 MODIFY 字段名 新的数据类型(长度);
-- 修改字段的字段名和数据类型,中括号中的内容是可选的
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型(长度) [COMMENT 注释] [约束];
-- 修改表的名称
ALTER TABLE 表名 RENAME TO 新表名;
-- 删除表,中括号中的内容是可选的
DROP TABLE [IF EXISTS] 表名;
-- 删除表,并重新创建该表,表中的数据清理,表结构依然存在
TRUNCATE TABLE 表名;
-- 删除表的字段
ALTER TABLE 表名 DROP 字段名;
四、DML
-- 添加数据
INSERT INTO 表名 (字段1, 字段2, ..., 字段n) values (值1, 值2, ..., 值n);
-- 修改数据,中括号中的内容是可选的,如果不加则修改的是整张表的数据
UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2, ..., 字段n = 值n [WHERE 条件];
-- 删除数据,中括号中的内容是可选的,如果不加则删除的是整张表的数据
DELETE FROM 表名 [WHERE 条件];
四、DQL
4.1 基本查询
-- 查询多个字段
SELECT 字段1, 字段2, ..., 字段n FROM 表名;
-- 查询所有字段
SELECT * FROM 表名;
-- 设置别名
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2], ..., 字段n [AS 别名n] FROM 表名;
-- 去重表中重复的记录
SELECT DISTINCT 字段列表 FROM 表名;
4.2 条件查询
SELECT * FROM 表名 WHERE 条件列表;
4.3 聚合查询
聚合函数是将一列的数据作为一个整体然后进行计算的函数。
函数 | 含义 |
---|---|
count | 统计数量,不包含 null 值 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
SELECT 聚合函数(字段列表) FROM 表名;
4.4 分组查询
-- 中括号的内容是可选的
SELECT 字段列表 FROM 表名 [WHERE 条件] group by 分组的字段 [HAVING 分组后的过滤条件];
4.5 排序查询
-- 中括号的内容是可选的
SELECT 字段列表 FROM 表名 [WHERE 条件] [group by 分组字段] order by 字段列表 排序方式;
排序方式:
- asc(默认):升序,从小到大;
- desc:降序,从大到小。
4.6 分页查询
起始索引从0开始
SELECT 字段列表 FROM 表名 limit 起始索引,查询多少个;
例如:
- 查询第一页的用户数据,显示5条:select * from user limit 0,5;
- 查询第二页的用户数据,显示5条:select * from user limit 5,10;
五、DCL
管理用户
-- 查询用户
USE mysql;
SELECT * FROM user;
-- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '用户密码';
-- 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password by '新密码';
-- 删除用户
DROP USER '用户名'@'主机名';
注意:
- 主机名可以使用 % 通配(任意主机都可以),也可以使用 localhost(本机),表示的是哪台计算机可以访问当前数据库;
- 这类的 SQL ,我们开发人员操作的比较少。
管理权限
MySQL 中定义了很多权限,常用的有以下几种:
权限 | 含义 |
---|---|
ALL | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
-- 查询用户的权限
SHOW GRANTS FOR '用户名'@'主机号';
-- 授予用户权限
GRANT 权限列表 ON 数据库.表 TO '用户名'@'主机号';
-- 撤销用户权限
REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'主机名';
注意:
- 多个权限之间可以用逗号隔开;
- 数据库和表名可以使用 * 进行通配,表示所有。