一、索引:

  就是用来提高搜索性能的 只有我们数据量非常大的时候,索引可以展现出它的优势来!
    注意:索引,我们在添加了以后,不用刻意的去使用它,它会自动生效

  1. 常规索引(index):没有任何限制,就是普通的索引
    1> 在建表时创建普通索引
      create table t1(
        id int unsigned not null,
        name varchar(32),
        index id(id) // index 索引名(字段名)
      );

    2> 在建表之后给表字段添加普通索引
      create index id on t2(id);
      create 索引类型 索引名 on 表名(字段名);

    3> 删除表中的普通索引
      drop index id on t2;
      drop 索引类型 索引名 on 表名;

  2. 唯一索引(unique)
    定义了唯一索引的数据列,它里面的内容,必须保证没有重复的,如果出现重复的内容,则会报错!

    1> 在创建表的时候定义唯一索引
      create table t1(
        id int unsigned not null,
        name varchar(32),
        unique index name(name) //索引类型 索引名(字段名)
      );

    2> 在创建表的时候定义唯一索引2
      create table t1(
        id int unsigned not null,
        name varchar(32) unique //直接在建表时将索引名写在指定字段后
      );

    3> 表创建以后添加唯一索引
      create unique index name on t1(name);
      create 索引类型 索引名 on 表名(字段名)

    4> 删除唯一索引
      drop index name on t1;
      drop index 索引名 on 表名;

  3. 主键索引(primary key)
    主键索引类似于唯一索引,它的数据列也必须保证是唯一的,它跟唯一索引的区别在于,它只能在一个表中定义一次

    1> 创建表是添加主键索引
      create table t1(
        id int unsigned not null auto_increment primary key,
        name varchar(32)
      );

    2> 在建表之后加主键索引
      因为主键索引比较特殊,它只能在一个表中出现一次,所以在建表后添加主键索引使用下面的方法
      alter table t7 change id id int unsigned not null auto_increment primary key;
      alter table 表名 change 原字段 新字段 类型(长度) 约束条件;

    3> 删除主键索引
      ① 首先,看一下你的表中是否有 auto_increment 这个约束条件

      ② 如果有,先将其删除
      alter table 表名 change id id int unsigned not null;

      ② 最后,可以删除主键索引
      alter table 表名 drop primary key;

  4. 全文索引
    用户能够在不使用模式匹配操作的前提下去搜索单词或短语。全文索引在MySQL中是一个FULLTEXT类型的索引,但只能用在MyIASM表,并且只能在CHAR、VARCHAR或TEXT类型的列上创建,也允许创建在一个或多个数据列上。这是一种特殊的索引。
    1> 创建表时添加全文索引
      create table books(
        bookid int(10) not null auto_increment,
        bookname varchar(50) not null,
        detail text not null,
        fulltext (detail),
        primary key (bookid)
      );
    2>查询detail字段中出现的‘hello’的记录,以相关性从高到低的顺序排列。
      select match(detail) against('hello') from books;

二、存储引擎
  1.需要先分析我们的项目属于那种类型的,然后再去选择使用哪种存储引擎

    1> MyISAM //因为它不支持事务的处理,不占用磁盘的空间,所以访问速度快当我们执行查询的频率比较高时,使用MyISAM这种存储引擎

    2> InnoDB //可以支持事务处理的,占用磁盘的空间,会降低访问速度,因为它安全,因此我们在执行一些具有风险的操作时,建议使用InnoDB存储引擎,修改、删除

  2.查看当前我们所使用的存储引擎

    show variables like 'default_storage_engine';
    +------------------------+--------+
    | Variable_name | Value |
    +------------------------+--------+
    | default_storage_engine | MyISAM |
    +------------------------+--------+
    1 row in set, 1 warning (0.00 sec)

  3. 在建表时指定存储引擎
    mysql> create table t8(
    -> id int unsigned not null auto_increment primary key,
    -> name varchar(32) not null unique
    -> )engine=InnoDB[MyISAM]; //这里是指定存储引擎的地方

  4. 查看表存储引擎的方法
    show create table 表名; 查看建表语句即可

三、字符编码
  查看当前服务器或数据库的编码,使用 \s 即可

  1> 服务器级

  2> 数据库级

  3> 数据表级

  4> 数据字段级

  如果说你想要让数据库中的数据不出现乱码,就必须保证上面四个级别编码统一都是 utf8

  我们可以设置的编码,到底有多少种

    show character set;

  注意:因为我们MySQL中,编码设置具有遗传性、继承性,所以,我们只设置服务器级别的编码设置为 utf8 ,那么无论他下面的数据库、数据表、数据字段都会继承 utf8 的编码

  1. 服务器级别的编码如何来进行设置

    set character_set_server = '编码';

  2. 数据库级别的编码进行设置

    创建时给定编码:create database 数据库名 default charset = 'utf8';

    修改数据库编码:set character_set_database = '编码';

  3. 数据表级别的编码进行设置

    创建数据表时给定编码:
      create table t9(
        id int unsigned not null auto_increment primary key,
        name varchar(32)
      )engine=MyISAM default charset=utf8; //进行设置数据表编码的位置

    修改表的编码:alter table t9 charset='utf8';

  4. 对数据字段级别的编码进行设置

    必须是字符串型的数据才会有编码

    alter table t9 change name name varchar(32) character set 'utf8';

  5.配置文件修改默认字符编码

    在[mysqld]下添加

      character-set-server=utf8

    在[client]下添加

      default-character-set=utf8
四、修改表结构

  1.添加字段

    alter table 表名 add 字段名 字段类型(长度) 约束条件;
    alter table stu add aihao set("dabolang","xiaobolang");
    alter table stu add xiaoming varchar(32) after name;
    alter table stu add sid int unsigned not null .. first;

    注意:我们在添加字段时,可以规定它添加的位置,通过 after 或 first 来控制默认位置为最后一个字段后

  2.删除字段

    alter table 表名 drop 字段名;

    注意:删除字段是,关键字是 drop 而不是 delete 这点要注意

    再次注意:drop 是针对于数据库或数据表或数据表结构执行删除时的关键字,delete 是针对数据表中的数据执行删除时的关键字

  3.修改字段

    alter table 表名 change 原字段名 新字段名 类型(长度) 约束条件;
    例如:alter table stu change classid classname varchar(32) default 'lamp149';

    alter table 表名 modify 原字段名 类型(长度) 约束条件;
    例如:alter table stu modify classname varchar(64) default 'lamp149';

    注意:使用change 关键字可以将字段名同时进行修改,但是modify不具有重命名的效果,只能修改数据类型和约束条件

  4.修改表名

    alter table 表名 rename 新表名;
    例如:alter table stu rename stu1;