MySQL的备份与还原与索引、视图、存储过程与权限

来源:互联网 发布:天地知我心二 编辑:程序博客网 时间:2024/05/17 06:52

以下命令是在cmd中进行
1、MySQL的备份与还原
    1.1备份数据库

      mysqldump --no-defaults -u 用户名 -p --databases 要备份的数据库 > 备份路径

--no-defaults 有些版本需要,有些不要,备份路径一定要在本地磁盘有该路径,注意路径的书写



   1. 2还原数据库
      mysql -u 用户名 -p < 当时的备份文件路径
-p后面可以直接跟上密码

   1. 3备份数据表
      mysqldump --no-defaults -u 用户名 -p 数据库 要备份的表 > 备份路径


    1.4还原数据表
      mysql -u 用户名 -p 还原表所属的数据库 < 备份路径

//在数据库中的 mysql数据库下操作
2、用户与权限(DCL)
    1.创建用户
      create user '用户名'@'主机IP' identified by '密码';
      注意:如果要让该用户在每台机器上都能登录,则主机IP为'%'。
   
    2.1.授予用户权限
     grant update|insert|alter... on 数据库名.数据表名 to '用户名'@'主机IP';


    2.2.收回用户权限
      revoke 权限 on 数据库名.数据表名 from '用户名'@'主机IP'; 


    2.3.删除用户
      delete from user where user='用户名';


3索引(index)
    分析查询语句:explain select * from 表 [where ...];
    索引主要用来提高检索(select)效率。


    创建普通索引的语法:
    create index 索引名称 on 表名称(字段名列表);
    注意:创建索引字段时,应该选择那些查询条件经常会使用到的字段。
    
    查看索引:
    show index from 表名称 \G;


    删除索引:
    drop index 索引名称 on 表名称;


    以下情况不会使用到索引:
    1.模糊查询时,%出现在第一个匹配位置时索引不会被用到。
    2.当使用多个字段共同创建索引时,只有第一个字段被使用时会用到索引,其它
      字段不会使用到索引。


    补充:唯一索引(也叫唯一约束)unique
       create table stu(
           id int primary key auto_increment,
           name varchar(10) unique,
           score double unique
       );
       主键约束与唯一约束的共同点与不同点:
       共同点:值不能重复。
       不同点:主键值不能为null,且每个表最多只能有一个主键。
               唯一约束的列值可以为null,且每个表可以有多个唯一索引(约束)。


4视图(view)
    视图是一个查询结果集。方便多次使用该结果集。可以将视图作为一张逻辑表。
    create view 视图名称
    as
    (select查询语句);
     
    举例:
    create view emp_view 
    as
    (
      select  emp.e_name, emp.e_job,dept.d_name  from employee as emp 
      inner join dept on emp.dept_no=dept.d_no
    );


5存储过程(Storage Procedure)

一些简单的存储过程

    delimiter // mysql默认的结束是;,用delimiter修改
    create procedure 存储过程名(参数类型 参数名称 参数数据类型)
    begin
       存储过程体


    end //


    参数类型: 
     in(输入参数类型,默认参数类型)  
     out(输出参数类型) 
     inout(输入输出参数类型)


     eg: in(输入参数类型,默认参数类型) 
         delimiter //
         create procedure proc_select(stuid int)
         begin
            select id as 学号,name as 姓名,age as 年龄,score as 成绩,remark as 备注
            from student where id=stuid;
         end  // 


    eg: out(输出参数类型) 
        delimiter //
        create procedure proc_out(out count int)
        begin
          select count(*) into count from student;
        end  // 


        call proc_out(@x) //
        select @x //


    eg:inout(输入输出参数类型)
       delimiter //
         create procedure proc_inout(inout info varchar(20))
         begin
            select remark into info from student where name=info;
         end  //


        set @y='熊大' //
        call proc_inout(@y) //
        select @y //


   eg: if...then...end if结构
    delimiter //
    create procedure proc_update(in a int)
    begin
       if (a is not null) then
         update student set remark='你的武功已经很高了!' where score>=95;
       end if;
    end  // 


   
    delimiter //
    create procedure proc_case(in stuid int)
    begin
          declare vscore double;
          declare vremark varchar(20);
          declare info varchar(20);
          select score,remark into vscore,vremark from student where id=stuid;
          case vscore
              when 60 then
                 set info='刚好及格';
              when 95 then
                 set info='我考了95分!';
              else
                 set info='不知道,没查出来';   
          end case;
   select info;
   end  // 


6.MySQL系统函数
    时间数据类型: date (2017-02-23)
                   time (16:40:35)
                   datetime (2017-02-23 16:40:35)
                   timestamp 


    日期时间函数:
     1.返回当前日期时间 now()或者sysdate()


     2.增加时间函数:
       adddate('date类型或datetime类型',interval 要增加的时间 year|month|day|hour|minute|second);
       eg:六天以后的时间
          select adddate(now(),interval 6 day);


     3.减去时间函数:
       subdate('date类型或datetime类型',interval 要减去的时间 year|month|day|hour|minute|second);
       eg:六天以前的时间
          select subdate(now(),interval 6 day);


     4.时间间隔函数:
       datediff('第一个时间date或datetime类型','第二个时间date或datetime类型');
       注意:使用第一个时间减去第二个时间的日期部分。


     
    其他函数:
      select md5('要进行MD5加密的字符串');
      select database(); 查看当前所在的数据库
      select session_user(); 查看当前用户




    
    


    










    
    
0 0