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