MySQL学习(五)——多表查询和DCL以及数据库的备份和还原。

199 阅读3分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。

前言

大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍Mysql中的多表查询和DCL以及数据库的备份和还原。

1. 多表查询

1.1 内连接查询

1.1.1 隐式内连接

隐式内连接:使用where条件消除因笛卡尔积产生的无用数据。

【格式】

select 
    字段 
from
    表名1 , 表名2 
where 条件

如果不使用where的话就会产生数据冗余。比如下面两个表:

学生表(学号,姓名,学科,成绩,所在班级号)

班级表(班级号,班级名称)

如果要查询学生所在班级名称:

  1. 不使用where结果: 学号,姓名,学科,成绩,所在班级号,班级号,班级名称。

  2. 使用where结果: 学号,姓名,学科,成绩,班级号,班级名称。

1.1.2 显式内连接

显示内连接:使用inner join关键字。得到的是内部共有的数据,也就是两个表的交集部分。

【格式】

select 
    字段 
from
    表名1 [inner] join 表名2 
on 
    条件

1.2 外连接查询

1.2.1 左外连接

查询的是左表的全部数据和与右表的交集部分。

【格式】

select 
    字段 
from
    表名1 left [outer] join 表名2 
on 
    条件

1.2.2 右外连接

查询的是右表的全部数据和与左表的交集部分。

【格式】

select 
    字段 
from
    表名1 right [outer] join 表名2 
on 
    条件

1.3 子查询(嵌套查询)

在查询中嵌套查询,把嵌套的查询称为子查询。

1.3.1 子查询结果为单行单列

子查询可以作为条件,使用运算符(> >= < <= =)去判断。

【实例展示】

select 
    *
from
    emp
where
    salary=(
        select 
            max(salary)
        from
            emp
    );

1.3.2 子查询结果为多行单列

子查询可以作为条件,使用运算符in判断。

【实例展示】

select 
    * 
from 
    emp 
where
    dept_id in
            (select 
                id
             from
                dept
             where 
                name='财务部' or name='市场部'
            );

1.3.3 子查询结果为多行多列

子查询作为一张虚拟表参与查询。

【实例展示】

select 
    * 
from
    dept t1,
    (select
        *
    from
        emp
    where
        join_date>'2022-11-01') t2,
where
    t1.id=t2.id;
    

2. 数据库的备份和还原

2.1 命令行

备份:

  • mysqldump -u用户名 -p密码 要备份的数据库名称> 保存的路径

【实例展示】

mysqldump -uroot -p123456 db1 > d://db1.sql;

还原:

  1. 登录数据库 mysql -uroot -p123456;
  2. 创建数据库 create datebase db1;
  3. 使用数据库 use db1;
  4. 执行文件。 source d://db1.sql;

2.2 图形化工具

使用小海豚工具:

备份:右键导出。

还原:右键执行sql脚本。

3. DCL

3.1 管理用户

管理用户的操作:

  • 添加用户

    create user '用户名'@'主机名' identified by '密码';
    -- 创建本机用户
    create user 'zhangsan'@'localhost' identified by '123456';
    -- 创建远程用户,可以在任意主机上登录
    create user 'lisi'@'%' identified by '123456';
    
  • 删除用户

    drop user '用户名'@'主机名';
    
  • 修改用户密码

    1. 修改普通用户密码:
    update user set password = password('新密码') where user='用户名';
    set password for '用户名'@'主机名' = password('新密码');
    
    1. 修改root用户密码:
      1. 以管理员身份打开cmd,输入net stop mysql停止mysql服务。
      2. 使用无验证方式启动mysql服务:mysqld --skip-grant-tables
      3. 打开新的cmd窗口,输入mysql,修改密码。
      4. 打开任务管理器手动关闭mysqld进程
      5. 启动mysql服务
  • 查询用户

    -- 1.切换到mysql数据库
    use mysql;
    -- 2.查询user表
    select * from user;
    

3.2 权限管理

  1. 查询权限

    show grants for '用户名'@'主机名';
    
  2. 授予权限

    grant 权限列表(select,delete,update...0) on 数据库.表名 to '用户名'@'主机名';
    授予所有权限
    grant all on *.* to '用户名'@'主机名';
    
  3. 撤销权限

    revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
    

小结

以上就是关于Mysql中多表查询的语法和数据库备份与还原的命令行和图形化工具的使用,以及DCL的语法格式的介绍。关于mysql的学习我们就到这里了,欢迎读者关注mysql学习的专栏(传送门),一起学习进步。希望对读者有所帮助,如有不正之处,欢迎留言指正。