day 44 数据库的补充,权限

                                                                                  数据库中的常见引擎,索引,慢日志,用户权限的设置

数据库中的常见引擎 :

有三种常见储存引擎:

      innodb :         

            1.(默认版本包含5.5)
            2.支持事务
            3.不支持全文索引
            4.索引和数据都是在同一个文件中, .ibd表的结构实在.frm文件中

      mylsam;

            1.(默认版本5.5以下 5.3)
    2.不支持事务
    3.支持全文索引
            4..frm: 表结构
       .MYD: 表数据
    .MYI: 表索引

      memory:           

             全文索引: sphinx

索引的目的就是为了加速查询速度:

索引:

     数据库中的索引有三种

         1,主键索引:

                作用是:便于数据查找,不能为空,不能重复, primary key

         2,唯一索引:

                   作用: 加快数据的查找速度,不能重复,可以为空,unique(列名)

                   联合唯一索引:加快查询 + 不能重复 unique(列名1,列名2)

         3,普通索引:

                   作用: 加快查询 index(列名)

    创建主键索引的方法:

         1.创建表的时候创建主键:

create table t1(
   id int auto_increment primary key, # 创建主键
   name char(12) not null default ' '
)engine=innodb charset=utf8

        2,表已经存在了,创建主键

#表已经存在创建主键
alter table t1 change  id id int auto_increment primary key;

    创建唯一索引的方法:

          1,创建表的时候创建唯一索引:

#创建唯一索引
#可在创建表的时候直接在需要创建唯一索引的属性后面添加unique
#第一种方式
 create table t1(
   id  int auto_increment primary key,
   name char(12) not null default ' ' unique
)
#第二种方式,在创建表时在最后的属性后面添加unique ix_name (属性名)
create table t1(
   id int auto_increment primary key ,
   name char(12) not null default '',
   unique ix_name (name)
)engine=innodb charset=utf8
#创建联合唯一属性
create table t1(
   id int auto_increment primary key,
   name char(12) not null default ' ',
   age int not null,
   unique ix_name_age (name,age)
)engine=innodb charset=utf8

          2,表已经存在了,创建唯一索引:

    

#表已经存在了,需要添加唯一索引
create unique index ix_name on t1 (name);
#表已经存在了,创建联合唯一索引
create unique index ix_name_age on t4 (name,age) 

    创建普通索引的方法:

         1,表已经存在,需要创建普通索引:

#表已经存在,创建普通索引
create index ix_age on t1 (age); 

        2,在创建表的时候创建普通索引    

#在创建表的时候创建普通索引
create table t1(
     id int  auto_increment primary key,
     name char(32) not null default '',
     age int not null 
     index ix_age(age)
) engine=innodb charset=utf8

    删除索引: 

#drop index (索引名称) on (表名称)
#实例: drop index ix_age on t1

索引的使用:
    explain 工具
       查看sql语句是否用的上索引, 或者查看sql执行效率的工具
       给执行的SQL语句出一个报告, 通过此报告来判断sql语句的执行效率和效果
ES (elasticsearch )
SQL语句的规则:
  - 不建议使用 like 进行搜索
  - 组合索引最左前缀
  如果组合索引为:(name,email)
  where name and email   -- 使用索引
  where name        -- 使用索引
  where email        -- 不使用索引

慢日志:

    记录执行速度特别慢的sql语句.

    开启mysql 中的慢日志步骤:

      1, show variables like '%query%'; (查看慢日志的状态是什么样的)

      2,set global long_query_time = 1 (设置慢查询的时间,超过这个时间就是比较慢的sql语句)

     3,set global slow_query_log = 'ON' (开启慢日志,默认为OFF)

     4,slow_query_log_file  = D:MySQLpmysql-5.6.44-winx64dataochen-PC-slow.log (这是一个文件,存放哪些速度比较慢的sql语句)

   关闭慢日志:

       set global slow_query_log = 'OFF';

普通日志记录; 开启普通日志记录后,我们在数据库中操作的每一条sql都会记录下来

   show variables like '%general%'; (查看普通日志记录是什么状态)

  +------------------+------------------------------------------------+------------------------+
  | Variable_name | Value                                                                             |                                        
  +------------------+------------------------------------------------+------------------------+
  | general_log | ON                                                                                      |
  | general_log_file   |  D:MySQLpmysql-5.6.44-winx64dataochen-PC.log 
  +------------------+------------------------------------------------+------------------------+

   开启普通日志记录:

   set  global  general_log  = 'ON';(开启普通日志记录)

   general_log_file  (是存放日志文件路文件路径)

   关闭普通日志文件:

   set  global  general_log = 'OFF' ( 关闭普通日志文件)

权限管理:

  

创建用户 
    create user '用户名'@'IP地址' identified by '密码';
    creaee user 'zekai'@'192.168.1.123' identified by '123qwe';
    creaee user 'zekai'@'192.168.1.%' identified by '123qwe';
    create user 'zekai'@'%' identified by '123qwe';

  删除用户
    drop user '用户名'@'IP地址';
  修改用户
    rename user '用户名'@'IP地址' to '新用户名'@'IP地址';

  修改密码
    set password for '用户名'@'IP地址' = Password('新密码')

  授权:
    grant 权限 on 数据库.表 to '用户'@'IP地址'     -- 授权

    grant select on db1.* to 'zekai'@'%';
    grant select on *.* to 'zekai'@'%';
    grant select, insert, delete on db1.* to 'zekai'@'%';

需要记住的是:

          flush privileges; (刷新缓存,用于数据库中修改某一个值时候进行操作)

原文地址:https://www.cnblogs.com/WBaiC1/p/11040162.html