zoukankan      html  css  js  c++  java
  • MySQL索引、字符编码、表结构

    一、索引:

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

      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;

  • 相关阅读:
    elasticsearch 插件 大全
    ElasticSearch 服务搭建
    限制玻尔兹曼机(Restricted Boltzmann Machine)RBM
    卷积神经网络
    [转]MATLAB cell数据类型
    [转]matlab语言中的assert断言函数
    [转]matlab中squeeze函数的用法,numel的用法
    Sparse autoencoder implementation 稀疏自编码器实现
    MATLAB中的randi函数
    可视化自编码器训练结果&稀疏自编码器符号一览表
  • 原文地址:https://www.cnblogs.com/yexiang520/p/5568765.html
Copyright © 2011-2022 走看看