学习报告:冬季实战营第三期

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在《冬季实战营第三期:MySQL数据库进阶实战》的学习报告

冬季实战营第三期:MySQL数据库进阶实战



MySQL数据库快速部署实践

MySQL安装与配置

MySQL是一个关系型数据库管理系统,本步骤指导您如何在ECS实例上安装MySQL

  1. 执行如下命令,更新YUM源

    rpm -Uvh  http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
    
  2. 执行如下命令,安装MySQL

    yum -y install mysql-community-server --nogpgcheck
    
  3. 执行如下命令,查看MySQL版本号

    mysql -V
    

    返回结果如下,表示您已成功安装MySQL

    结果

  4. 执行如下命令,启动MySQL服务

    systemctl start mysqld
    
  5. 执行如下命令,设置MySQL服务开机自启动【可选】

    systemctl enable mysqld
    
  6. 配置MySQL的root用户密码

    • 执行如下命令,查看 /var/log/mysqld.log 文件,获取root用户的初始密码

      grep 'temporary password' /var/log/mysqld.log
      

      返回结果如下所示,您可以查看到root用户的初始密码

      结果

* 执行以下命令,使用root用户登录数据库

        mysql -uroot -p

    返回结果如下所示,输入root用户的初始密码。

    ![结果](https://ucc.alicdn.com/pic/developer-ecology/a63c22d465b04626901611cad1a8e5ab.png)

* 执行以下命令,修改MySQL的root用户的初始密码

    ```sql
    set global validate_password_policy=0;  #修改密码安全策略为低(只校验密码长度,至少8位)
    ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';
    ```

* 执行以下命令,授予root用户远程管理权限

```sql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';
```

* 输入 `exit` 或 `quit` 退出数据库

![结果](https://ucc.alicdn.com/pic/developer-ecology/379d871e4c3f4790ae057edea1dd33bc.png)

使用演示

以下内容对MySQL进行基本演示

  • 使用root用户登录数据库

    mysql -uroot -p12345678
    
    
  • 创建test数据库

    注意:进入 mysql 之后,每条命令结尾都要有分号

    create database test;
  • 查看当前数据库列表

    show databases;

    结果

  • 连接 mysql 数据库

    use mysql;
    

    查看 mysql 数据库中的数据表

    show tables; 
    

    退出 MySQL 界面

    exit
    

    结果

数据库导入和导出

  • 返回 Linux 界面,执行如下命令,将名为 test 的数据库备份到当前目录的 test.sql

    界面显示 Enter password,输入 MySQL 数据库的登录密码 12345678
    根据备份的数据库大小,等待时间长短不同。完成后,使用命令 ll 查看备份文件,界面查看到备份文件 test.sql ,完成备份

    mysqldump -uroot -p test > test.sql
    

    结果

  • 返回 Linux 界面,执行如下命令,将 test.sql 导入数据库。界面显示 Enter password ,输入 MySQL 数据库的登录密码 12345678

    说明:其中参数 -D 是指定数据库为test

    mysql -uroot -p -Dtest < test.sql
    
    
  • 还有一种导入方法,在MySQL中

    进入 MySQL 数据库

    
    mysql -uroot -p12345678
    

    连接数据库 test

    
    use test;
    

    使用 source ,将 test.sql 导入数据库 test

    
    source /root/test.sql;
    

    source + 文件路径

    结果

常用 SQL 语句

本小节将主要介绍基本的 SQL 语句,数据的增删查改等

提示:若当前不是在 Mysql 数据库的命令界面,请执行命令: ,登录到 Mysql 数据库命令行界面。否则,请忽略此操作。

mysql -uroot -p12345678
  • 连接数据库

    用法:

    use 数据库名;
    

    结果

  • 创建数据表

    用法:

    CREATE TABLE 表名称 (列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....);
    

    表名为 test1 ,test1 表有两列:id 和 name。其中,id 的数据类型为 int,name 的数据类型为 char,且字符长度为 20

    create table test1 (id int,name char(20));

    结果

  • 插入数据

    语法:

    INSERT INTO 表名称 VALUES (值1, 值2,....);
    

    示例

    insert into test1 values(1,"zhangsan");
    

    此条数据的第一列 id 的值为1,第二列 name 的值为zhangsan

    结果

  • 查看表中数据

    语法1:

    SELECT * FROM 表名称; //查询表中的所有列的数据信息
    
    SELECT 列名称 FROM 表名称; //查询表中的指定列的数据信息
    

    查看 test1 表中的全部数据信息。此时,用户可以查看到新插入的一行数据: id 的值为 1 , name 的值为 zhangsan

    select * from test1;

    查看

    结果

  • 更新表中数据

    语法:

    UPDATE 表名称 SET 列名 = 值 WHERE 表名称 = 值;
    

    更新 test1 表中的数据,也就是,将所有 id 为 1 的 name 值均修改为 lisi

    update test1 set name = "lisi" where id =1;

    查看 test1

    select * from test1;

    结果

  • 删除表中数据

    语法:

    DELETE FROM 表名称 WHERE 列名称 = 值;
    

    删除 test1 表中,所有 id 值为 1 的数据

    delete from test1 where id =1;

    查看 test1

    select * from test1;

    结果

  • 删除数据表

    语法:

    DROP TABLE 表名称
    

    删除名为 test1 的数据表

    drop table test1;

    查看当前连接数据库中的所有表

    show tables;

    结果

  • 删除数据库

    语法:

    DROP DATABASE 数据库名称
    

    删除名为 test 的数据库

    drop database test;

    查看所有数据库

    show databases;

    结果

数据库上云实战

现有数据库查看

主要内容:登录本地部署的MySQL数据库实验环境,并查看本地MySQL源数据库中的信息。

  1. 点击右侧 ,切换至Web Terminal,远程登录到 云产品资源 中的 MySQL源数据库 ECS实例
  2. 运行如下命令,登录到ECS实例的MySQL数据库:

    mysql -u root -p123456
    

    结果

  3. 通过如下操作,查看源数据库bakery、其中的表customer和product,以及表中的数据

    • 执行如下命令,查看数据库信息

      show databases;
      

      结果

    • 执行如下命令,切换数据库为bakery

      use bakery;
      

      结果

    • 执行如下命令,查看表中数据:

      show columns from customer;
      show columns from product; 
      select * from customer;
      select * from product;

      结果

上云迁移

  1. 首先,通过如下操作步骤,登录到阿里云RDS管理控制台:

    • 点击右侧图标,切换到远程桌面操作界面
    • 双击打开虚拟桌面 FireFox ESR浏览器,在RAM用户登录框中点击 下一步,复制 云产品资源 列表中 子用户密码 粘贴(lx shell粘贴快捷键ctrl+shift+v,其他地方粘贴是ctrl+v)到浏览器 RAM用户登录界面,即可登录当前子账号。

    • 顶部导航栏处点击【产品与服务】,在主页面的【数据库】条目下找到【云数据库RDS版】,点击进入阿里云RDS管理控制台

  2. 点击左侧的【实例列表】,在实例列表页面,选择云产品资源提供的 地域,然后点击目标实例右侧的【管理】进入RDS实例的管理控制台。

  3. 通过如下步骤,进入数据库账号创建页面:

    • 在RDS实例的管理页面,点击左侧栏的【账号管理】,进入数据库账号管理页面
    • 在【用户账号】页面,点击左侧的【创建账号】
  4. 填写如下信息,完成数据库账号创建:

    • 数据库账号:请根据 输入框 下端的 命名规则 ,输入 数据库账号名称,例如:lab_user 。
    • 账号类型:选择【普通账号】。
    • 密码 :请根据 输入框 下端的 密码规则 ,输入 密码,例如:Passw0rd 。
    • 确认密码:再次输入创建的密码。
    • 完成如上信息后,点击【确定】。
    • 返回 账号管理 的 用户账号 ,查看到新建账号 lab_user 的 状态 为 已激活

      结果

      结果

  1. 通过如下操作步骤,进入数据库创建页面:

    • 点击左侧栏的【数据库管理】,进入数据库管理页面

      结果

    • 在右侧的【数据库管理】页面,点击左上角的【创建数据库】,进入创建页面

      结果

  2. 在弹出的创建页面中,添加如下信息:

    • 数据库(DB)名称:请根据 输入框 下端的 命名规则 ,输入 数据库名称,例如:lab_db 。
    • 支持字符集:默认设为 utf8 。
    • 授权帐号:选择新建数据库账号,例如lab_user

    结果

    • 完成如上配置信息后,点击底部的【创建】,完成数据库的创建

    结果

    • 在【数据库管理】页面中,等待1分钟左右,可以查看到数据库 lab_db 的 数据库状态 为 运行中 ,且 绑定账号 为 新建数据库账号 lab_user

    结果

  3. 进入数据传输服务DTS

    • 复制下方地址,在FireFox浏览器打开新页签,粘贴并访问数据传输控制https://dts.console.aliyun.com/
    • 在左侧控制台,单击数据迁移
    • 在数据迁移页面,迁移任务列表选择华东1(杭州),单击配置迁移任务
  1. 配置迁移任务,按照如下步骤,输入 源库信息 的配置信息:

    • 实例类型:选择 有公网IP的自建数据库
    • 实例地区: 选择 云产品资源 中分配的 地域 ,例如:华东1
    • 数据库类型:选择 MySQL
    • 主机名或IP地址:输入 云产品资源 中分配的 MySQL源数据库 ECS实例的 弹性IP
    • 端口:使用默认端口号 3306
    • 数据库账号:输入ECS上自建MySQL的 数据库账号 ,root;数据库密码:自建MySQL的访问密码,123456
    • 完成如上配置后,点击右侧的 【测试连接】 ,测试自建MySQL数据库的连通性,若显示 测试通过 ,证明连接成功。否则,请检查如上配置信息是否正确。
  2. 按照如下步骤,完成 目标库信息 的配置信息:

    • 实例类型:选择 RDS实例
    • 实例地区:选择 实验资源 中分配的 地域 ,例如:华东1
    • RDS实例ID :选择 实验资源 中提供的 目标数据库 的 实例ID
    • 数据库账号:输入RDS实例中新建的 数据库账号 lab_user ;数据库密码:新建数据库的密码 Passw0rd
    • 完成如上配置后,点击右侧的 测试链接 ,测试RDS账号的连通性,若显示 测试通过 ,证明连接成功。否则,请检查如上配置信息是否正确
    • 完成如上的配置后,点击右下角的【 授权白名单并进入下一步 】
  1. 通过如下步骤,配置迁移任务的 迁移类型及列表:

    • 点击左侧 迁移对象 中的本地MySQL数据库中的bakery
    • 点击 >
    • 数据库 bakery 移动到 已选择对象 的列表中
    • 完成如上配置后,点击右下角的【 预检查并启动】
  2. 等待30秒钟左右,完成预检查,检查结果为 预检查通过100% ,点击 【下一步】

    说明:若预检查未通过,请根据错误提示和如上的操作步骤,核对迁移任务的配置是否正确。

  • 此时,页面迁移任务的状态为 迁移中 ,等待3-4分钟,状态变为 已完成

数据库迁移结果确认

  1. 顶部导航栏处点击【产品与服务】,在主页面的【数据库】条目下找到【云数据库RDS版】,点击进入阿里云RDS管理控制台。

    结果

  2. 在 实例列表 界面中,点击右上角的【登录数据库】,进入数据库管理登录界面。

    结果

  3. 在弹出的页面中,输入如下的信息:

    • 网络地址:端口:请输入 云产品资源 中,RDS 目标数据库 提供的 链接地址 以及端口号 3306
    • 例如:提供的RDS 链接地址为

       rm-uf6l90d950j1o7890.mysql.rds.aliyuncs.com
      

      则输入信息为:

      rm-uf6l90d950j1o7890.mysql.rds.aliyuncs.com:3306
      
    • 用户名:输入新建数据库账号 lab_user
    • 密码:输入新建数据库密码 Passw0rd

    完成后,点击【登录】(忽略RAM授权)

  4. 如下图,进入数据库管理页面,证明数据库迁移成功

    结果

MySQL数据库基础

数据操作

本小节主要为大家介绍MySQL中常用的数据查询、删除、更新、插入等基本操作

  1. 使用CREATE TABLE语句创建一个数据表。将以下语句复制到SQLConsole页签中,然后单击【执行】。

    CREATE TABLE `user` (
     `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
     `name` varchar(32) DEFAULT NULL COMMENT 'name',
     `age` int(11) DEFAULT NULL COMMENT 'age',
     `address` varchar(32) DEFAULT NULL COMMENT 'address',
     `sex` tinyint(1) DEFAULT NULL COMMENT 'sex,woman:0,man:1',
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    执行成功后,单击【刷新】查看创建的数据表

    结果

  2. 插入数据

    插入语句说明:

    • table_name(col_name,...)中的字段名列表必须和values(expr,...)字段值列表一致。
    • 如果数据是字符型,必须使用单引号或者双引号。
    • 被AUTO_INCREMENT标记的自动递增的主键,在插入数据时,可以不设置值。

    将以下SQL语句复制到SQLConsole页签中,然后单击【执行】:

    INSERT INTO USER
           (name, age, address, sex)
    VALUES
           ('zhangsan', 21, 'jiangxi', 0),
           ('lisi', 22, 'hubei', 0),
           ('wangwu', 23, 'hunan', 0),
           ('lilei', 24, 'henan', 1),
           ('hanmeimei', 25, 'hebei', 1),
           ('xiaoming', 26, 'shandong', 1),
           ('xiaoli', 27, 'shanxi', 1) ;

    结果

  3. 查询数据

    查询语句格式:

    SELECT col_name,...
    FROM table_name
    WHERE where_condition
    GROUP BY col_name,...
    HAVING where_condition
    ORDER BY col_name,...
    LIMIT offset,row_count

    【例子】将以下SQL语句复制到SQLConsole页签中,然后单击【执行】:

    SELECT id,name,age,address,sex FROM user;

    结果

  4. 更新数据

    更新语句格式:

    UPDATE table_name SET col_name=expr,... WHERE where_condition

    【例子】将以下SQL语句复制到SQLConsole页签中,然后单击【执行】:

    UPDATE `user` SET `age` = 28,`address` = 'sichuan' WHERE `name` = 'xiaoming' ;

    结果

  5. 删除数据

    删除语句格式:

    DELETE FROM table_name WHERE where_condition

    【例子】将以下SQL语句复制到SQLConsole页签中,然后单击【执行】:

    DELETE FROM `user` WHERE `name` = 'xiaoming' ;

    结果

函数操作

本小节主要为大家介绍MySQL中常用的内置函数。

  1. 使用CREATE TABLE语句创建一个数据表。将以下语句复制到SQLConsole页签中,然后单击【执行】。

    CREATE TABLE student_score(sid INT PRIMARY KEY NOT NULL, sname VARCHAR(30), sage INT, ssex VARCHAR(8), score INT(11));
    insert into `student_score`(`sid`, `sname`, `sage`, `ssex`,`score`)
    values (1001, 'xiaohua', 17,'0', 75),
     (1002, 'xiaohong', 18,'0', 80),
     (1003, 'wangwu', 18,'1', 90),
     (1004, 'lisi', 17,'1', 68),
     (1005, 'zhangsan', 19,'1', 73),
     (1006, 'xiaohei', 19,'1', 100),
     (1007, 'xiaoma', 20,'0', 77),
     (1008, 'xiaoli', 17,'1', 82),
     (1009, 'xiaobai', 19,'0', 88),
     (1010, 'wentong', 18,'0', 53);
  2. AVG()函数

    AVG() 函数返回数值列的平均值

    语法:

    SELECT AVG(column_name) FROM table_name
    

    将以下语句复制到SQLConsole页签中,然后单击【执行】:

    SELECT avg(score) FROM student_score;

    执行结果如下:

    结果

  3. COUNT()函数

    COUNT() 函数返回匹配指定条件的行数

    语法:

    # COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
        SELECT COUNT(column_name) FROM table_name;
    
    # COUNT(*) 函数返回表中的记录数:
        SELECT COUNT(*) FROM table_name;
    
    # COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
        SELECT COUNT(DISTINCT column_name) FROM table_name;
    

    将以下语句复制到SQLConsole页签中,然后单击【执行】:

    SELECT COUNT(*) FROM student_score;

    执行结果如下:

    结果

  4. MAX()函数

    MAX() 函数返回指定列的最大值

    语法:

    SELECT MAX(column_name) FROM table_name;
    

    将以下语句复制到SQLConsole页签中,然后单击【执行】:

    SELECT MAX(score) FROM student_score;

    执行结果如下:

    结果

  1. MIN()函数

    MIN() 函数返回指定列的最小值

    语法:

    SELECT MIN(column_name) FROM table_name;
    

    将以下语句复制到SQLConsole页签中,然后单击【执行】:

    SELECT MIN(score) FROM student_score;

    执行结果如下:

    结果

  1. SUM()函数

    SUM() 函数返回数值列的总数

    语法:

    SELECT SUM(column_name) FROM table_name;
    

    将以下语句复制到SQLConsole页签中,然后单击【执行】:

    SELECT SUM(score) FROM student_score;

    执行结果如下:

    结果

组合查询

本小节主要介绍如何使用GROUP BY、HAVING和ORDER BY等进行分组查询

  1. 使用CREATE TABLE语句创建数据表

    将以下语句复制到SQLConsole页签中,然后单击【执行】:

    CREATE TABLE `student` (
     `sid` int(11) NOT NULL,
     `sname` varchar(30) DEFAULT NULL,
     `sage` int(11) DEFAULT NULL,
     `ssex` varchar(8) DEFAULT NULL,
     PRIMARY KEY (`sid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    insert into `student`(`sid`,`sname`,`sage`,`ssex`) values
    (1005,'xiaohua',19,'0'),
    (1004,'xiaohong',18,'0'),
    (1003,'wangwu',18,'1'),
    (1002,'lisi',17,'1'),
    (1001,'zhangsan',18,'1');
    CREATE TABLE `sc` (
     `sid` int(11) NOT NULL,
     `cid` int(11) NOT NULL,
     `score` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    insert into `sc`(`sid`,`cid`,`score`) values
    (1001,101,75),
    (1001,102,85),
    (1002,101,65),
    (1002,102,95),
    (1003,101,65),
    (1003,102,95),
    (1004,101,80),
    (1004,102,80),
    (1005,101,75),
    (1005,102,85);
    CREATE TABLE `course` (
     `cid` int(11) NOT NULL,
     `cname` varchar(30) DEFAULT NULL,
     `tid` int(11) DEFAULT NULL,
     PRIMARY KEY (`cid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    insert into `course`(`cid`,`cname`,`tid`) values
    (102,'yuwen',2),
    (101,'shuxue',1);
    CREATE TABLE `teacher` (
     `tid` int(11) NOT NULL,
     `tname` varchar(30) DEFAULT NULL,
     PRIMARY KEY (`tid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    insert into `teacher`(`tid`,`tname`) values
    (2,'liulaoshi'),
    (1,'wanglaoshi');

    执行成功后,单击【刷新】查看创建的数据表

    结果

  2. 查询所有同学的学号和成绩

    将以下SQL语句复制到SQLConsole页签中,然后单击【执行】

    # 使用WHERE s. sid = sc.sid 来消除笛卡尔积。
    SELECT s.sid ,s.sname ,c.score FROM student AS s ,sc AS c WHERE s.sid = c.sid ;

    执行结果如下:

    结果

  1. 查询语文成绩在80以上同学

    将以下SQL语句复制到SQLConsole页签中,然后单击【执行】

    SELECT a.score,
           b.cname,
           s.sname
      FROM sc as a,
           course AS b,
           student AS s
     WHERE a.cid= b.cid
       AND s.sid= a.sid
       AND a.cid= 102
       AND a.score> 80

    执行结果如下:

    结果

  1. 查询语文成绩比数学成绩高的同学

    将以下SQL语句复制到SQLConsole页签中,然后单击【执行】:

    SELECT a.sid,
           a.score,
           s.sname
      FROM(
    SELECT sid, score
      FROM sc
     WHERE cid= "102") a,
           (
    SELECT sid, score
      FROM sc
     WHERE cid= "101") b,
           student as s
     WHERE a.score > b.score
       AND a.sid= b.sid
       AND s.sid= a.sid

    执行结果如下:

    结果

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
弹性计算 关系型数据库 MySQL
关于“冬季实战营第一期”的学习报告
冬奥云小宝带你玩转五期实战营,初识上云基础,非常适合新手上路,上云必备环境准备让您轻松上云。
860 1
关于“冬季实战营第一期”的学习报告
|
存储 前端开发 JavaScript
使用 Html、CSS 和 Javascript 的简单模拟时钟
使用 Html、CSS 和 Javascript 的简单模拟时钟
231 0
|
SQL 弹性计算 运维
冬季实战营第三期学习报告
通过本期学期,掌握了MySQL及RDS MySQL基本操作
155 2
|
Web App开发 弹性计算 Kubernetes
学习报告:冬季实战营第四期
在《冬季实战营第四期:零基础容器技术实战》的学习报告
191 0
学习报告:冬季实战营第四期
|
关系型数据库 MySQL 分布式数据库
冬季实战营第一期-学习报告
冬季实战营第一期-学习报告
|
弹性计算 Java 关系型数据库
|
Linux 程序员 Shell
冬季实战营第二期学习报告
针对第二期的Linux操作系统实战入门,通过动手实操的体验写出感受。时间真快,从1月24日到1月28日,参与了五天不同内容的动手实战,从中发现虽然在大学里学过这门课,但是好像没有这期收获很多没有学过的知识点,每一天都在涨知识,不得不感叹,学无止境,感觉真妙,可见大学里学的东西比较浅,还需要自学其它很多新知识点,感谢第二期Linux操作系统实战入门的体验,再接再厉~ 让我们一起向未来。
158 0
冬季实战营第二期学习报告
|
弹性计算 缓存 安全
学习报告:冬季实战营第二期
在冬季实战营第二期:Linux操作系统实战入门的学习报告
223 0
学习报告:冬季实战营第二期
|
Kubernetes 监控 Docker
冬季实战营第四期学习报告
通过本期学期,掌握了容器的基本技术
97 0
|
Linux Windows
冬季实战营第二期-学习报告
冬季实战营第二期-学习报告