SQL注入:

  SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

  假如存在一张表t_user,

 

sql = "select * from t_user where username='zs' and password='123456'";
   String name = "zs' or true # "
   sql = "select * from t_user where username='"+ name + "'"
   sql = "select * from t_user where username='zs' or true # ' and password='123456'";
   zs' or true #

索引(index):

  什么是索引:

    是一种数据库对象,用来加快查询速度和效率的数据对象

    索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。

    MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。

      

instr mysql sql注入 mysql注入是什么_instr mysql sql注入

  索引优缺点:

提高检索数据的速度,这是创建索引的最主要的原因

    索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加;索引需要占用物理空间,每一个索引要占一定的物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了

  MySQL的底层索引式二叉树

int语句默认情况下不使用索引:

    例如:select * from score where id in(1,2,3,)

int类型的主键索引默认使用升序

  索引分类:

    普通索引、主键索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等

  索引的设计原则:

      1.选择惟一性索引
      2.为经常需要排序、分组和联合操作的字段建立索引
      3.为常作为查询条件的字段建立索引
      4.限制索引的数目
      5.尽量使用数据量少的索引
      6.尽量使用前缀来索引
      7.删除不再使用或者很少使用的索引

创建索引:

  创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有三种方式,这三种方式分别是创建表的时候创建索引、在已经存在的表上创建索引和使用ALTER TABLE语句来创建索引。

  三种方式:

    1.在创建表的时候:

      创建表的时候可以直接创建索引,这种方式最简单、方便。其基本形式如下:

    

create table 表名(属性名 数据类型 [完整性约束条件],
        ......
        属性名 数据类型
        [unique | fulltext | spatial ] index | key
        [别名](属性名1[(长度)] [asc | desc])    ------int类型可以不用写长度
        );
  • UNIQUE:可选。表示索引为唯一性索引。
  • FULLTEXT:可选。表示索引为全文索引。
  • SPATIAL:可选。表示索引为空间索引。
  • INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是    一样的。
  • 索引名:可选。给创建的索引取一个新名称。
  • 字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
  • 长度:可选。指索引的长度,必须是字符串类型才可以使用。
  • ASC:可选。表示升序排列。
  • DESC:可选。表示降序排列

    2.表存在的时候,使用create:

     

create index 索引名称 on tablename(列名称(类型长度));

       

instr mysql sql注入 mysql注入是什么_字段_02

 

 

    3.表存在,通过alter table 创建索引:

      在已经存在的表上,可以通过alter table 语句直接为表上的一个或几个字段创建索引,基本形式如下:

     

alter table 表名 add [unique | fulltext |spatial ]
        index 索引名(属性[长度]) [asc | desc]);

instr mysql sql注入 mysql注入是什么_数据_03

 

 

查询索引:

show index from 表名称 [from db_name];

查询索引的执行情况:

  

explain select * from t_hero where id=1;

删除索引:

  删除索引是指将表中已经存在的索引删除掉。一些不再使用的索引会降低表的更新速度,影响数据库的性能。对于这样的索引,应该将其删除。

  

drop index 索引名 on 表名;

    

instr mysql sql注入 mysql注入是什么_字段_04