前言

最近开始学习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特性:

  1. 前面的查询语句和后面的查询语句结果互不干扰(例如前面条件不成立,无法查询结果,并不影响后面查询语句的执行)
  2. 前面的查询语句的字段数量 和 后面的查询语句的字段数量 要一致

排序(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';

语法暂时更新到这里,后续有回顾到新的基础知识还会进行补充。

Last modification:January 1, 2023
If you think my article is useful to you, please feel free to appreciate