前言
最近开始学习sql注入,看到sql语句的语法基础视频太多了,就寻思能不能跳过,直接看注入的部分。果不其然,看了一半发现还是得转头回去补习基础。那这篇文章,我就打算用来记录一些sql语句的基础语法。
数据库服务器层级关系
服务器-->多个数据库-->多个数据表-->多个记录(行)、字段(列)-->数据
查询当前数据库服务器的所有数据库
show databases;
选中某个数据库
use 数据库名字;
查询当前数据库所有的表
show tables;
查询表所有数据(以表t1为例)
select * from t1;
select:查询关键字
:是所选择的字段, 表示所有
from + 表名:表示要查询数据的表
条件查询(where关键字)
基本语法:
select * from 表名 where 条件;
例如,要查询t1表中id=2的数据:
select * from t1 where id=2;
多个条件查询(and)关键字
基本语法:
select * from 表名 where 条件1 and 条件2;
and:表示条件1 且 条件2
多个条件查询(or关键字)
基本语法:
select * from 表名 where 条件1 or 条件2;
or:表示条件1 或 条件2
合并条件查询(union关键字)
基本语法:
select * from 表名 where 条件1 union select * from 表名 where 条件2;
例如,要查询t1表中id=2和pass=111的数据:
select * from t1 where id=2 union select * from t1 pass=111;
union特性:
- 前面的查询语句和后面的查询语句结果互不干扰(例如前面条件不成立,无法查询结果,并不影响后面查询语句的执行)
- 前面的查询语句的字段数量 和 后面的查询语句的字段数量 要一致
排序(order by关键字)
基本语法:
order by 字段名字(或数字);
例如在如下表中
如果输入
select * from t1 order by 1;
则结果不会有任何变化,均为根据id排序。
如果输入
select * from t1 order by 3;
则表中数据会变为下图:
因为是根据pass排序的。
因此,根据这一性质,我们可以利用order by来猜解表的列数。
order by猜解表的列数
例如,如果在order by后面写1,没有报错,说明这个表有至少有一个字段;如果在order by后面写4,报错为没有找到字段,说明这个表没有4个字段。
MySQL部分
查看mysql有哪些用户
mysql> select user,host from mysql.user;
查看用户对应权限
示例如下:
select * from user where user='root' and host='主机名'\G;
示例命令查询了root用户的权限
\G使每个字段打印到单独的行,也有’;'的作用
创建mysql用户
基本语法如下:
CREATE USER '用户名'@'主机IP' IDENTIFIED BY '密码';
把普通用户变为管理员
GRANT ALL PRIVILEGES ON *.* TO '用户'@'主机IP' WITH GRANT OPTION;
删除用户
drop user finley@'主机IP';
语法暂时更新到这里,后续有回顾到新的基础知识还会进行补充。