华为云RDS操作实践

购买华为云RDS

登陆华为云账号,在右上角有一个 购买数据库实例,点击即可。
购买成功后,回在控制台显示实例名称,然后输入用户名以及密码登陆即可。

在 MySQL 数据库建立一个海洋环境信息表,存储某一地点不同日期一天中不同时间的海洋观测数据,包括日期,时间,经度,维度,风向,风速,压力,温度,温度。

我们可以在登陆的首页处先点击创建一个数据库
在这里插入图片描述
然后创建完毕后,点击数据库的名字,进入到该数据库里面去,在数据库里面建立一张数据表名!两种方式创建

  • 可以通过点击创建数据表进行创建,需要填写表名,以及字符集(这里我们使用utf-8字符集就可以了)
    在这里插入图片描述

  • 通过执行sql语句进行创建(操作不熟练的,直接操作界面更方便一些)
    如果想要使用Sql语句进行执行,可以点击页面头部的Sql窗口按钮。这样就可以通过sql语句进行执行了。

经过上面的操作,我们已经拥有一张自己的表格了。

将 Excel 表格的海洋环境数据导入本地 MySQL 数据库。迁移 MySQL 数据,把本地海洋观测MySQL 数据库迁移到华为云数据库。

首先我们先要在本地安装navicat数据库 图形化界面工具。关于这个工具,我就不再赘述了。网上有很多的使用教程。安装配置好之后,在自己 创建的数据库中,点击文件-> 导入向导->然后选择自己要导入的对应的数据文件即可。

在接下来的操作中,如果你是想尝试第一种方式,那么就在navicat中导出数据库文件为d b文件或者csv文件。如果是想尝试第二种方法就导出为sql脚本可执行文件,然后使用文本编辑器打开即可。

方式一 通过导入本地的数据库,然后使用OBS桶进行数据库迁移

在这里插入图片描述
可以看到这个位置有一个导入的按钮 ,我们点击进去,然后新建一个导入的位置
在这里插入图片描述
可以看到这里有一个OBS桶,如果没有的话,我们自己创建一个就可以了。然后点击或将文件拖动到此处后上传文件字样,就可以创建一个导入任务了。(这里我没有导入成功)

方式二 手动通过Sql语句导入

将导出的s q l可执行语句,放入到华为数据库的SQL查询处执行SQL语句。就将数据导入进去了。但是在导入的过程中,出现了一个问题,就是我们在建立表的时候,建立的是有id的数据表,但是我们在本地建设数据库的时候并没有包含着一列。因此,我们要修改一下表,删除第一列id。在执行语句。
在这里插入图片描述
然后等待执行结束就可以了!
在这里插入图片描述
这样我们的数据库的内容,就全部迁移过去了,有点费劲。现在有个问题就是,这样我们的数据集就没有了主键。因此就不能进行编辑操作。因此,我们需要返回对象列表,点击修改表,点击修改字段部分,然后在第一行插入一个字段,我们称之为id。然后将这一列设置为主键,并且自动增长。
在这里插入图片描述
这样我们的数据库的操作就完成了。

当然数据库迁移的方式还有很多很多,比如我们可以直接写一个程序从本地数据库读取,然后往华为数据库添加,也是可以的。或者华为云提供的其他的迁移方式。

求每天最大风速的时间和风向(结果可能多条记录)

1
2
3
4
5
6
7
8
SELECT OBDATE, Time, WIND_SPD, WIND_DIR
FROM marinedata m1
WHERE WIND_SPD IN (
SELECT MAX(WIND_SPD)
FROM marinedata m2
WHERE m1.OBDATE = m2.OBDATE
GROUP BY OBDATE
);

我用的数据集的结果为:
在这里插入图片描述

求每天最小风速的时间和风向(结果可能多条记录)

1
2
3
4
5
6
7
8
SELECT OBDATE, Time, WIND_SPD, WIND_DIR
FROM marinedata m1
WHERE WIND_SPD IN (
SELECT MIN (WIND_SPD)
FROM marinedata m2
WHERE m1.OBDATE = m2.OBDATE
GROUP BY OBDATE
);

在这里插入图片描述

求温度最低时的时间,风速和风向

1
2
3
4
5
6
7
8
SELECT OBDATE, Time, WIND_SPD, WIND_DIR
FROM marinedata m1
WHERE TEMPERATURE_DB IN (
SELECT MIN (TEMPERATURE_DB )
FROM marinedata m2
WHERE m1.OBDATE = m2.OBDATE
GROUP BY OBDATE
);

在这里插入图片描述

求温度最高时的时间,风速和风向

1
2
3
4
5
6
7
8
SELECT OBDATE, Time, WIND_SPD, WIND_DIR
FROM marinedata m1
WHERE TEMPERATURE_DB IN (
SELECT MAX(TEMPERATURE_DB )
FROM marinedata m2
WHERE m1.OBDATE = m2.OBDATE
GROUP BY OBDATE
);

在这里插入图片描述

求平均风速和温度

1
2
SELECT AVG(WIND_SPD) AS Average_WIND_SP, AVG(TEMPERATURE_DB) AS Average_Temp
FROM marinedata

在这里插入图片描述

求温差最大的日期

1
2
3
4
5
6
SELECT OBDATE, Time, TEMPERATURE_DB - TEMPERATURE_DP AS DIFF
FROM marinedata
WHERE TEMPERATURE_DB - TEMPERATURE_DP = (
SELECT MAX(TEMPERATURE_DB - TEMPERATURE_DP)
FROM marinedata
);

在这里插入图片描述

用户权限控制

练习创建不同的用户,并实现不同的权限控制语句

  • 界面操作
    其他操作->用户操作
    在这里插入图片描述
    主机地址表示允许通过此用户访问数据库服务器的客户端IP地址白名单,不填或填%表示所有IP地址。
    在这里插入图片描述
    这里我们可以看到一些对全局表的操作权限设置。这里我配置一个select的权限测试一下。

如果想要对某一个数据库进行权限赋予,则需要在对象权限里面进行编辑,如果想要针对某一个表的话,则需要在表/视图里面进行勾选,选择相应的表格即可。
在这里插入图片描述
这里我选择了 select 和 Delete的权限

然后返回到登陆界面,新增一个数据库登陆,将我们刚刚新添加的数据库的登陆添加上,测试连接成功后即可使用。
在这里插入图片描述
现在我执行一个updata操作,看结果

1
2
3
4
5
---------------开始执行---------------
【拆分SQL完成】:将执行SQL语句数量:(1条)
【执行SQL:(1)】
UPDATE marinedata SET TEMPERATURE_DB =0 WHERE id =1
执行失败,失败原因:UPDATE command denied to user '666'@'***' for table 'marinedata'

可以看到,执行失败了,因为我没有给这个表赋予updata权限。
我们在执行一个select的操作,查询id为2的数据
在这里插入图片描述
可以看到我们已经执行成功了。

  • 语句操作
1
2
3
4
5
6
7
8
9
/*COMMON SETTINGS
创建一个用户,666代表用户名,100.% 表示所有的ip地址都可以访问,我们也可以换成指定的ip地址。identified by表示的是用户的密码
*/
CREATE USER '666'@'100.%' IDENTIFIED BY '******';

/*GLOBAL SETTINGS
权限分配的语句为GRANT,这条语句的意思是将SELECT这个权限给所有的表,用户为666这个用户
*/
GRANT SELECT ON *.* TO '666'@'100.%';

权限授权和回收

权限授权上面已经说了,权限回收的界面操作,按照上面的步骤将勾选的权限删除掉即可。
使用语句进行权限回收-

1
REVOKE SELECT ON *.* FROM '666'@'100.%';

【拆分SQL完成】:将执行SQL语句数量:(1条)
【执行SQL:(1)】
REVOKE SELECT ON . FROM ‘666‘@’100.%’
执行成功,耗时:[13ms.]

这样权限就回收了