一、mysql数据库基础
1.1 网站结构
一个普通网站结构如下,“三层结构”正常用户或恶意攻击者先向Web服务器提交请求,Web服务器解析并传送数据库处理。
1.2什么是数据库
首先我们先来理解什么是数据库。
数据库就是一个存放数据的地方。每个人家里都有冰箱,冰箱是用来存放食物的,同样的,数据库是存放数据的地方。正是因为有了数据库后,我们可以直接查找数据。例如你每天使用余额宝查看自己的账户收益,就是从数据读取数据后给你的。
一个数据库的简单示意结构如图,一个体系中可能含有多个数据库,数据库中有表,数据表中包含有字段,字段中包含数据。
1.3SQL简介
SQL是一门数据库语言。它可以让你存储和操作数据。
常见的SQL数据库有MySQL,SQL server,oracle,sybase,db2。
数据库是存储和管理数据的系统,它提供了多种功能和语句来操作数据。以下是一些常用的数据库功能和SQL语句示例:
1. **查询(SELECT)**
- 基本查询:获取表中的所有记录和列。
SELECT * FROM table_name;
- 选择特定列:只获取表中的某些列。
SELECT column1, column2 FROM table_name;
- 条件查询:根据条件筛选记录。
SELECT * FROM table_name WHERE condition;2. **排序(ORDER BY)**
- 按列排序:将结果按指定列升序或降序排序。
SELECT * FROM table_name ORDER BY column_name ASC; -- 升序
SELECT * FROM table_name ORDER BY column_name DESC; -- 降序3. **过滤(WHERE)**
- 过滤数据:只返回满足特定条件的数据。
SELECT * FROM table_name WHERE column_name = value;4. **分组(GROUP BY)**
- 将数据分组:按一个或多个列对结果进行分组。
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;5. **聚合函数(Aggregate Functions)**
- 计算总和、平均值、最大值、最小值等。
SELECT COUNT(*), AVG(column_name), MAX(column_name), MIN(column_name) FROM table_name;6. **联合查询(JOIN)**
- 内连接(INNER JOIN):返回两个表中匹配的行。
SELECT * FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
- 左连接(LEFT JOIN):返回左表中的所有行,即使右表中没有匹配。
SELECT * FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
- 右连接(RIGHT JOIN):返回右表中的所有行,即使左表中没有匹配。
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
- 全外连接(FULL OUTER JOIN):返回两个表中的所有行,即使没有匹配。
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;7. **插入(INSERT INTO)**
- 插入新记录:向表中添加新数据。
INSERT INTO table_name (column1, column2) VALUES (value1, value2);8. **更新(UPDATE)**
- 更新记录:修改表中的现有数据。
UPDATE table_name SET column1 = value1 WHERE condition;9. **删除(DELETE)**
- 删除记录:从表中删除数据。
DELETE FROM table_name WHERE condition;10. **创建表(CREATE TABLE)**
- 创建新表:定义表的结构。
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
);11. **修改表(ALTER TABLE)**
- 修改表结构:添加、删除或修改列。
ALTER TABLE table_name ADD column_name datatype;
ALTER TABLE table_name DROP COLUMN column_name;12. **视图(VIEW)**
- 创建视图:创建一个虚拟表,其内容由查询定义。
CREATE VIEW view_name AS
SELECT column1, column2 FROM table_name WHERE condition;这些只是数据库操作的一些基本功能和语句,具体的SQL语法可能会根据不同的数据库系统(如MySQL、PostgreSQL、SQL Server等)有所不同。
mysql注释符:在注入操作中经常使用,让后面的语句失效
#
--
/* */
mysql的一些常用函数:
几个盲注的函数:
Length()函数,返回字符串的长度
Substr()截取字符串
substr(string string,num start,num length);
string为起始字符串;start为起始位置;length为长度。
Ascii()函数返回字符的ASCII码
left(name , 2)函数返回name的左边第二个字符
right(name , 2)函数返回name的右边的第二个字符
二、Infomation_schema
2.1 Infomation_schema简介
5.0以上的MySQL自带Infomation_schema这个数据库,5.0一下是没有的
INFORMATION_SCHEMA
是 SQL 数据库管理系统中一个特殊的数据库,它包含了数据库中所有其他数据库的元数据。这些元数据包括表、视图、列、索引、权限等信息。INFORMATION_SCHEMA
为数据库管理员和开发者提供了一个查询数据库结构和访问控制信息的途径
以下是
INFORMATION_SCHEMA
中一些常见的表:
- TABLES - 包含数据库中所有表的信息。
- COLUMNS - 包含表中所有列的信息。
- INDEXES - 包含有关索引的信息。
- VIEWS - 包含数据库中所有视图的信息。
- ROUTINES - 包含存储过程和函数的信息。
- SCHEMATA - 列出所有数据库(模式)的名称。
- CHARACTER_SETS - 列出所有可用的字符集。
- COLLATIONS - 列出字符集的排序规则。
开发者可以通过查询 INFORMATION_SCHEMA
来获取有关数据库结构的详细信息,这对于数据库设计、优化和维护非常有用。例如,要获取某个数据库中所有表的列表,可以使用以下 SQL 查询:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database_name';
这将返回指定数据库中所有表的名称。