来自云龙湖轮廓分明的月亮 发表于 2024-10-18 19:13:41

数据库sql入门

目录
媒介:
一、什么是sql
1、定义
2、范例
二、什么是数据库
三、数据库的增删改
1、查询数据库
  2、创建数据库
 3、删除数据库
4、选择进入数据库
5、创建表
6、检察表的信息
7、检察数据表列表
8、删除数据表
9、修改数据库表名
 10、修改字符集
11、写入内容
12 、增长列
13、修改内容
 14、删除列
15、删除行
16、删除表
四、数据库的查询
1、基本查询语句(select)
2、查询参数指令
联合(union)
分组(group by)
分列(order by)
 限制输出内容数量(limit)
与和或(and和or)
五、常用的sql高级语言
1、like
2、in
3、between ... and ...
4、as
5、join
六、常用函数
1、concat()
2、group_concat()
3、select database()
4、select version()
5、len()/length()
总结:
媒介:

做sql注入起首要理解sql语句和函数的用法而不是盲目做题硬背格式,这样子终极只会越做越懵,故在进入sql注入前我们要先了解数据库以及基本sql语句和函数的用法。
一、什么是sql

1、定义



[*]sql是用于访问和处理数据库的尺度的计算机语言。
[*]sql指布局化查询语言
[*]sql 使我们有能力访问数据库
[*]sql 是一种 ANSI 的尺度计算机语言
2、范例



[*]数据查询语言(DQL: Data Query Language)
[*]数据利用语言(DML:Data Manipulation Language)
二、什么是数据库

1、数据库:按照数据布局来组织、存储和管理的堆栈。简单举例来说就是相称于一个存放东西的堆栈,有了这个堆栈我们查找想要的东西就方便很多;
2、数据库的布局:库<——表=列+行https://latex.csdn.net/eq?https://latex.csdn.net/eq?
3、关系型数据库管理系统(RDBMS):RDBMS 是 SQL 的底子,同样也是全部现代数据库系统的底子,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access等等。是最常见的数据库范例;
关系型数据库=多张表+表之间的关系
4、表(table):是相关的数据项的聚集,它由列和行组成。RDBMS中的数据被存储在表中;一个数据库通常包含一个或多个表,每个表由一个表名标识,而表包含着带有数据的记录。
三、数据库的增删改

1、查询数据库

   SHOW DATABASES;
https://i-blog.csdnimg.cn/blog_migrate/5fd154d02625649cbdbe8e524af85284.png
  2、创建数据库

   CREATE DATABASE students charset utf8;
#charset定义字符集
https://i-blog.csdnimg.cn/blog_migrate/2f54cf5c6e3968446c3ba214a09970e5.png
 3、删除数据库

   DROP DATABASE students;
https://i-blog.csdnimg.cn/blog_migrate/22915e6c15a1f0727d8b0c0b7fdc52b2.png
4、选择进入数据库

   use students;
5、创建表

   CREATE TABLE student
(
    id int,
    name varchar(40),        #varchar用于存储可变长度字符串,是最常见的字符串数据范例
    sex char(4),        #用于存储固定长度字符串
    birthday date
);
留意:最后一个字段不需要逗号
https://i-blog.csdnimg.cn/blog_migrate/ce7a04fd736d8d7a44063f4259ebfe3a.png
6、检察表的信息

   SHOW FULL COLUMNS FROM student;
https://i-blog.csdnimg.cn/blog_migrate/2c92db73d9c135ab02d756805116f925.png
7、检察数据表列表

   SELECT * FROM student;
https://i-blog.csdnimg.cn/blog_migrate/22fc5921b697b628123f83abe9d74677.png
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'
);
https://i-blog.csdnimg.cn/blog_migrate/4ae876547f494f4956aab4f18fcc266f.png
12 、增长列

   ALTER TABLE student ADD score decimal(8,2);
#DECIMAL(M,D),M是数字最大位数,D是小数点右侧数字个数,整数M-D位
#decimal(8,2)数值范围是 -999999.99 ~ 999999.99
 https://i-blog.csdnimg.cn/blog_migrate/25c83724bbc31edc5027c3e898401634.png
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;        #同时改两列数据
https://i-blog.csdnimg.cn/blog_migrate/e4d4770bafabd47db638a837352c042a.png
https://i-blog.csdnimg.cn/blog_migrate/ea23643cc0d90ecc55765c1568dc45fb.png
 14、删除列

   ALTER TABLE student DROP score;
https://i-blog.csdnimg.cn/blog_migrate/f0b673d142f647497a6d253090efa74c.png
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'));
#子查询,优先执行()内的查询语句
https://i-blog.csdnimg.cn/blog_migrate/da8f3a2022948e954189d2c7d8e63bea.png
2、查询参数指令



[*] 联合(union)
   SELECT id FROM student UNION SELECT email FROM users;
#同时查询students库里student表里的id和users表里的email,用union联合
https://i-blog.csdnimg.cn/blog_migrate/73718eed43d47f6a9d701727089268d5.png
   SELECT * FROM student WHERE id=1 UNION SELECT * FROM users WHERE id=2; 
留意:联合注入前后表格列数必须一样,不然会报错
https://i-blog.csdnimg.cn/blog_migrate/9fbe4106081933da87bb21f1606ab699.png
   SELECT * FROM users WHERE id=1 UNION SELECT *,5 FROM student WHERE id=1;
#5为增补列,使得users和student列数一致可以查询
https://i-blog.csdnimg.cn/blog_migrate/5a28784ad6a19b060814bb4fa6a4e2cb.png


[*] 分组(group by)
   SELECT * FROM users WHERE id=1 GROUP BY 5;
#用于二分法判断表列数偶然可以绕过waf,如网站对order by 有限制就可用group by判断
https://i-blog.csdnimg.cn/blog_migrate/09a2de2d0d33dbac80a04e84165370ca.png
https://i-blog.csdnimg.cn/blog_migrate/e4fc404ee5a24eebbdbb0e28b2c4647e.png


[*] 分列(order by)
   SELECT * FROM users ORDER BY 1;
#将表按第一列排序,默认升序;同样可用于判断表列数
SELECT * FROM users ORDER BY 1 DESC;
#降序分列
https://i-blog.csdnimg.cn/blog_migrate/6ba0cc20548629a8f309e7559b04fce2.png


[*]  限制输出内容数量(limit)
   SELECT * FROM users LIMIT 1,1;
#从第二行开始显示一行数据;常用于报错注入
留意:limit记数从0行开始记起0就是第一行,1是第二行
https://i-blog.csdnimg.cn/blog_migrate/47a7e95d391643fa8930c63dd9d6fe43.png


[*] 与和或(and和or)
   SELECT * FROM student WHERE id=1 AND name='lin';
#查询同时包含id=1和name=lin的行,前后两个条件要同时满足
 https://i-blog.csdnimg.cn/blog_migrate/ec26a18424f412973f14b4a7eeae374d.png
   SELECT * FROM student WHERE id=2 OR name='lin'; 
#查询id=2的或name=lin的行,前后满足一个条件即可
https://i-blog.csdnimg.cn/blog_migrate/905f8731e45436b355ded51ce8551327.png
五、常用的sql高级语言

1、like

   SELECT * FROM users WHERE password LIKE '2%';
#查询password列以2开头那行
https://i-blog.csdnimg.cn/blog_migrate/b984dc41567395f1168a90b41b0473ee.png
   SELECT * FROM users WHERE password LIKE '%7'; 
#查询password列以7末端那行
 https://i-blog.csdnimg.cn/blog_migrate/eb4aea977eaaad916329ec49c10a44db.png
    SELECT * FROM users WHERE password LIKE '%1%';
#查询password列包含了1的那行
https://i-blog.csdnimg.cn/blog_migrate/68a46ca40a402e081d192ce6fdf28f93.png

2、in

   SELECT * FROM users WHERE name IN ('lin','lin1');
#在where子句中规定多个值
https://i-blog.csdnimg.cn/blog_migrate/c528bc6fd4e75e76a478719c16823d1e.png
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” 。
https://i-blog.csdnimg.cn/blog_migrate/ff72748416311bba309b4c03440bd09e.png
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';
#利用表别名
https://i-blog.csdnimg.cn/blog_migrate/99caed514dc73771914e09050fbcaa67.png
   SELECT id "p" FROM student; 
#利用列别名
https://i-blog.csdnimg.cn/blog_migrate/b79f02c0968ceea98d0ebac22b45d3b6.png
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表的主键列只有两行,故最后只返回两行
https://i-blog.csdnimg.cn/blog_migrate/46130b6ef4c442512add9540dea1a00b.png
六、常用函数

1、concat()

   SELECT concat(1,2);        #拼接
https://i-blog.csdnimg.cn/blog_migrate/9a961777f621874648c4f11034f961a7.png
2、group_concat()

   SELECT GROUP_CONCAT(id,name,sex,birthday) FROM student;
#多行变一行
https://i-blog.csdnimg.cn/blog_migrate/5abd34d6558f555cc5b0ccaeb9bdd660.png
3、select database()

   SELECT DATABASE();
#检察当前数据库名字
https://i-blog.csdnimg.cn/blog_migrate/4a828f18f290b8520396929a82557185.png
4、select version()

   SELECT version();
#查询当前数据库版本,绕过waf会用到
https://i-blog.csdnimg.cn/blog_migrate/149d8b1cf42e0cb0593932b708c66acb.png
5、len()/length()

   SELECT length(lastname),lastname FROM persons;
#查询lastname列里的值的长度
https://i-blog.csdnimg.cn/blog_migrate/b5883026a706814b4252cba345922b1f.png
总结:

sql语言是一门计算机语言,本文仅仅只介绍了数据库的底子以及在做sql注入题常见的一些语言和函数,在后续做题中如果碰到没见过的sql语言需要自己查找其他资料进行增补。
对于sql注入,最重要的便是理解其是如何搭建数据库又是如何从数据库中查询数据的;只要对于原理有足够的理解,底子的sql注入题基本手到擒来。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库sql入门