一、基础信息查询
csharp
-- 当前数据库
SELECT DATABASE();
-- 数据库版本
SELECT VERSION();
二、DDL 库与表定义(创建/删除/修改结构)
(一) 数据库操作
sql
SHOW DATABASES; -- 查看所有库
USE 数据库名; -- 切换数据库
CREATE DATABASE 库名; -- 创建库
DROP DATABASE 库名; -- 删除库
(二) 数据表操作
sql
SHOW TABLES; -- 查看当前库所有表
DESC 表名; -- 查看表结构
CREATE TABLE 表名(字段 类型...); -- 创建表
DROP TABLE 表名; -- 删除表
三、DML 数据操作(增删改查 核心)
(一) 查询 SELECT
sql
SELECT * FROM 表名; -- 查所有列
SELECT 字段1,字段2 FROM 表名; -- 查指定列
WHERE 条件 -- 条件筛选
DISTINCT 字段 -- 去重
ORDER BY 字段 ASC/DESC -- 升序/降序排序
LIMIT n,m -- 分页,从n开始取m条
(二) 插入 INSERT
scss
INSERT INTO 表名(字段) VALUES(值);
(三) 修改 UPDATE
sql
UPDATE 表名 SET 字段=值 WHERE 条件;
-- 必加 where,否则全表修改
(四) 删除 DELETE
sql
DELETE FROM 表名 WHERE 条件;
-- 必加 where,否则全表删除
四、常用条件语法
(一) 运算符
- 比较:
=、>、<、>=、<=、!= - 逻辑:
AND、OR、NOT - 范围:
BETWEEN 小 AND 大 - 集合:
IN(值1,值2)
(二) 模糊查询
sql
LIKE '%字符%' -- 匹配任意多个字符
LIKE '_字符_' -- 匹配单个字符
五、聚合函数(统计)
scss
COUNT() -- 统计行数
MAX() -- 最大值
MIN() -- 最小值
SUM() -- 求和
AVG() -- 平均值
六、分组与筛选
sql
GROUP BY 字段; -- 分组
HAVING 条件; -- 分组后条件过滤
七、联合查询 UNION
sql
select 列1,列2 from 表1
UNION
select 列1,列2 from 表2;
-- UNION 去重 / UNION ALL 不去重
-- 硬性要求:列数相同、对应字段类型兼容
八、 SQL 综合应用(CTF 注入)
(一) 核心系统库概念
information_schema
MySQL 自带系统字典库,储存整台数据库所有:库名、表名、字段名,注入查表必备。- 三张核心系统表
schemata:储存所有数据库信息tables:储存所有数据表信息columns:储存所有字段(列) 信息
(二) 关键字段释义
schema_name:数据库名table_schema:表所属的数据库table_name:数据表名column_name:字段(列)名
(三) CTF 注入常用语句
- 查看当前库、版本
csharp
SELECT DATABASE();
SELECT VERSION();
- 查询所有数据库
sql
SELECT schema_name FROM information_schema.schemata;
- 查询当前库所有表
ini
SELECT table_name FROM information_schema.tables WHERE table_schema = database();
- 查询指定表所有字段
ini
SELECT column_name FROM information_schema.columns WHERE table_name = '表名';
- 探测字段数量
vbnet
order by 1
order by 2
-- 不报错代表存在,报错即为最大列数
- 批量拼接爆库/表/字段
sql
-- 爆出当前库所有表
SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema = database();
-- 爆出指定表所有字段
SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name = '表名';
- 查询表内真实数据
sql
SELECT 字段1,字段2 FROM 表名;
SELECT * FROM 表名 LIMIT 0,1;