目录
前言:
做sql注入首先要理解sql语句和函数的用法而不是盲目做题硬背格式,这样子最终只会越做越懵,故在进入sql注入前我们要先了解数据库以及基本sql语句和函数的用法。
一、什么是sql
1、定义
- sql是用于访问和处理数据库的标准的计算机语言。
- sql指结构化查询语言
- sql 使我们有能力访问数据库
- sql 是一种 ANSI 的标准计算机语言
2、类型
- 数据查询语言(DQL: Data Query Language)
- 数据操纵语言(DML:Data Manipulation Language)
二、什么是数据库
1、数据库:按照数据结构来组织、存储和管理的仓库。简单举例来说就是相当于一个存放东西的仓库,有了这个仓库我们查找想要的东西就方便许多;
2、数据库的结构:库<——表=列+行
3、关系型数据库管理系统(RDBMS):RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access等等。是最常见的数据库类型;
关系型数据库=多张表+表之间的关系
4、表(table):是相关的数据项的集合,它由列和行组成。RDBMS中的数据被存储在表中;一个数据库通常包含一个或多个表,每个表由一个表名标识,而表包含着带有数据的记录。
三、数据库的增删改
1、查询数据库
SHOW DATABASES;
2、创建数据库
CREATE DATABASE students charset utf8;
#charset定义字符集
3、删除数据库
DROP DATABASE students;
4、选择进入数据库
use students;
5、创建表
CREATE TABLE student
(
id int,
name varchar(40), #varchar用于存储可变长度
字符串,是最常见的字符串数据类型
sex char(4), #用于存储固定长度
字符串
birthday date
);注意:最后一个字段不需要逗号
6、查看表的信息
SHOW FULL COLUMNS FROM student;
7、查看数据表列表
SELECT * FROM student;
8、删除数据表
drop TABLE student;
9、修改数据库表名
RENAME TABLE student TO user;
修改数据库表名为user
10、修改字符集
ALTER TABLE student CHARACTER SET utf8;
11、写入内容
INSERT INTO student
(
id,name,sex,birthday
)
VALUES #值
(
1,'lin','male','2004.12.24'
);
12 、增加列
ALTER TABLE student ADD score decimal(8,2);
#DECIMAL(M,D),M是数字最大位数,D是小数点右侧数字个数,整数M-D位
#decimal(8,2)数值范围是 -.99 ~ .99
13、修改内容
UPDATE student SET score=100; #修改所有分数
UPDATE student SET name='glg' WHERE id=1; #修改id=1的行name=glg
UPDATE student SET name='lin1',score=150 WHERE id=1; #同时改两列数据
14、删除列
ALTER TABLE student DROP score;
15、删除行
DELETE FROM student WHERE name='lin1'; #删除lin1所在的一整行
16、删除表
DELETE FROM student;
四、数据库的查询
1、基本查询语句(select)
SELECT * FROM student WHERE id=1;
#select+列名(*代表所有)from+表名 where+条件语句
SELECT * FROM student WHERE id IN ('1');
#从student表中查询所有包含id为1的
SELECT * FROM student WHERE id=(SELECT id FROM student WHERE name=('lin'));
#子查询,优先执行()内的查询语句
2、查询参数指令
-
联合(union)
SELECT id FROM student UNION SELECT email FROM users;
#同时查询students库里student表里的id和users表里的email,用union联合
SELECT * FROM student WHERE id=1 UNION SELECT * FROM users WHERE id=2;
注意:联合注入前后表格列数必须一样,不然会报错
SELECT * FROM users WHERE id=1 UNION SELECT *,5 FROM student WHERE id=1;
#5为补充列,使得users和student列数一致可以查询
-
分组(group by)
SELECT * FROM users WHERE id=1 GROUP BY 5;
#用于二分法判断表列数有时可以绕过waf,如网站对order by 有限制就可用group by判断
-
排列(order by)
SELECT * FROM users ORDER BY 1;
#将表按第一列排序,默认升序;同样可用于判断表列数
SELECT * FROM users ORDER BY 1 DESC;
#降序排列
-
限制输出内容数量(limit)
SELECT * FROM users LIMIT 1,1;
#从第二行开始显示一行数据;常用于报错注入
注意:limit记数从0行开始记起0就是第一行,1是第二行
-
与和或(and和or)
SELECT * FROM student WHERE id=1 AND name='lin';
#查询同时包含id=1和name=lin的行,前后两个条件要同时满足
SELECT * FROM student WHERE id=2 OR name='lin';
#查询id=2的或name=lin的行,前后满足一个条件即可
五、常用的sql高级语言
1、like
SELECT * FROM users WHERE password LIKE '2%';
#查询password列以2开头那行
SELECT * FROM users WHERE password LIKE '%7';
#查询password列以7结尾那行
SELECT * FROM users WHERE password LIKE '%1%';
#查询password列包含了1的那行
2、in
SELECT * FROM users WHERE name IN ('lin','lin1');
#在where子句中规定多个值
3、between ... and ...
SELECT * FROM student WHERE name BETWEEN 'lin' AND 'lin2';
#列出lin和lin2之间的数据
注意:
某些数据库会列出介于 “lin” 和 “lin2” 之间的人,但不包括 “lin” 和 “lin2” ;某些数据库会列出介于 “lin” 和 “lin2” 之间并包括 “lin” 和 “lin2” 的人;而另一些数据库会列出介于 “lin” 和 “lin2” 之间的人,包括 “lin” ,但不包括 “lin2” 。
4、as
SELECT id FROM student AS s;
#指定student表别名s
SELECT id as p FROM student;
#指定id列别名p
SELECT s.name FROM student s WHERE s.name='lin';
#使用表别名
SELECT id "p" FROM student;
#使用列别名
5、join
- JOIN: 如果表中有至少一个匹配,则返回行
- INNER JOIN: 内部连接,返回两表中匹配的行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
SELECT persons.lastname ,persons.firstname,users.password
FROM persons INNER JOIN users
ON id_p = id;#id_p是persons表的主键列,id是users表的主键列,通过inner join将两个表连接起来,由于users表的主键列只有两行,故最后只返回两行
六、常用函数
1、concat()
SELECT concat(1,2); #拼接
2、group_concat()
SELECT GROUP_CONCAT(id,name,sex,birthday) FROM student;
#多行变一行
3、select database()
SELECT DATABASE();
#查看当前数据库名字
4、select version()
SELECT version();
#查询当前数据库版本,绕过waf会用到
5、len()/length()
SELECT length(lastname),lastname FROM persons;
#查询lastname列里的值的长度
总结:
sql语言是一门计算机语言,本文仅仅只介绍了数据库的基础以及在做sql注入题常见的一些语言和函数,在后续做题中如果遇到没见过的sql语言需要自己查找其他资料进行补充。
对于sql注入,最重要的便是理解其是如何搭建数据库又是如何从数据库中查询数据的;只要对于原理有足够的理解,基础的sql注入题基本手到擒来。
到此这篇数据库sql入门_sql数据库有什么用的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/1474.html