您的位置:首页 > 数据库 > MySQL

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

2017-02-23 23:40 507 查看
以下命令是在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(); 查看当前用户

    

    

    

    

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql