进入mysql

net start mysql

mysql -u root -p

CREATE DATABASE study;

use study;

set names utf8;

简单的增删查改

  • 在study库里创建一个user表,包含三列:id(整数),name(长度为100的字符串),sex(长度为1的字符串)

    CREATE TABLE user

    (ID INT(4),Name VARCHAR(100),Sex VARCHAR(1));

  • 往user表中插入以下数据:

    • id=0,name=xiaoming,sex=y
    • id=1,name=xiaohong,sex=x

    insert into user

    (ID,Name,Sex)

    Values

    (0,"xiaoming","y"),

    (1,"xiaohong","x");

  • 查询user表中所有数据的name列语句:

    select name from user;

  • 查询user表中name为xiaoming的字段的语句:

    select * from user

    where name="xiaoming";

  • 删除user表中sex为x的语句:

    delete from user

    where sex="x";

  • 修改user表中为id为0的数据,将其name值改为xiaobai的语句

    update user

    set name="xiaobai"

    where ID=0;

知识点

mysql提供了很多内置函数,其中user函数的作用为返回当前用户

select user();

注释

单行注释:在一行语句后面加 # 或者 – 要注意的是 –后面是有一个空格的

多行注释:

/*

xxxx

/*

内联注释

/*!注释内容 */

当 ! 后面所接的数据库版本号时,当实际的版本等于或是高于那个字符串,应用程序就会将注释的内容解释为SQL,否则就会当做注释来处理。默认的,当没有接版本号时,是会执行里面的内容的

/*!50001 select * from test */;这里的50001表示假如数据库是5.00.01及以上版本,该语句才会被执行。***
***

这样就可以用内联注释绕过很多检测

提升

SQL中的information_scheme数据库

默认生成的数据库,该数据库保存了SQL所有的数据库的信息

SCHEMATA:

提供了当前mysql所有数据库的信息,是show databases的结果

Schema_name:数据库名称

Default_Character_Set_Name:默认字符编码

TABLES:

提供了当前数据库表的信息(包括视图),描述了某表属于某schema,是 show tables from schemaname的结果。

TABLES_SCHEMA:表所属数据库的名称

TABLES_NAME:表名称

COLUMNS:

提供了当前列的相关信息。

TABLE_SHCEMA:某列所属数据库

TABLE_NAME:某列所属表

COLUMN_NAME:某列列名

if语句的作用

在MySQL中if()函数的用法类似于Java中的三目表达式,其用处也比较多,具体语法如下:

if(expr1,expr2,expr3) ,如果expr1的值为true,则返回expr2的值,否则,则返回expr3的值。

select if(1>2,1,2); 的结果是2

在注入无回显时,可以用if语句判断注入是否成功,将expr2设为sleep(int),将expr3设为0,观察响应时间即可判断expr1是否为真

可以用case函数代替if函数,也可以用字符串操作:ELT(N,str1,str2,str3,…)

1
2
3
4
5
6
7
`CASE` `condition`
WHEN` `value1 ``THEN` `returnvalue1
WHEN` `value2 ``THEN` `returnvalue2
WHEN` `value3 ``THEN` `returnvalue3
……
ELSE` `defaultvalue
END
  • 如果 N = 1,返回 str1,如果N = 2,返回 str2,等等。如果 N 小于 1 或大于参数的数量,返回 NULL。

sleep(int)用于延迟

benchmark(count,expr) 函数会重复计算expr表达式count次,所以我们能通过尽可能多的增加计算的次数来增加时间延迟。