参考文档:

本实验的准备步骤较为繁多,而opengauss官方提供的文档较为零散,因此这个实验对于所需的文档进行整合,只需要观看这个博客就可以完成所有的实验内容:

openGauss v2.0.0:

01-1 在ECS上安装部署openGauss数据库指导手册
01-2 在虚拟机+CentOS上安装部署openGauss数据库指导手册
01-3 在虚拟机+openEuler上安装部署openGauss数据库指导手册
01-4 使用虚拟机镜像文件导入部署CentOS+openGauss指导手册
01-5 使用虚拟机镜像文件导入部署openEuler+openGauss指导手册
01-6 在ECS上安装部署极简版openGauss数据库指导手册
02 openGauss数据库开发调试工具指导手册
03 openGauss数据库日志管理指导手册
04 openGauss数据库维护管理指导手册
05 openGauss数据库开发指导手册
06 openGauss数据库安全指导手册
07 openGauss数据库备份恢复指导手册
08 openGauss开源数据库二次开发指导手册

云数据库-GaussDB(for openGauss):

01 GaussDB(for openGauss)数据库实验环境搭建指导手册
02 GaussDB(for openGauss)各种方式连接数据库实例指导手册
03 GaussDB(for openGauss)多用户访问同一数据库实例指导手册
04 GaussDB(for openGauss)数据库开发指导手册
05 GaussDB(for openGauss)数据库维护管理指导手册
06 GaussDB(for openGauss)场景化综合应用实验
07 GaussDB(for openGauss)场景化实验作业设计

以下实验使用的相关软件和参考文档可以通过这个网盘地址下载:

链接: https://pan.baidu.com/s/1Utlmw6Gfrspybw-eV88eEw

提取码: 3g8z


实验一:建立数据库

实验任务:

  • 购买ECS服务器,安装Gauss数据库

  • 了解IAM账号

  • 安装openEuler虚拟机并连接

  • 在ECS上创建数据库

  • 建立“学籍与成绩管理系统”表格;

    • 建立表之间的参照关系
    • 建立适当的索引
      • 在实验三说明建立索引的原因

实验内容:

学籍与成绩管理系统:

包含以下信息: 课程名称、课程代号、课程类型(必修、选修、任选)、学分、任课教师姓名、教师编号、教师职称、教师所属学院名称、教师所属学院代号、教师所授课程学生姓名、学生学号、学生所属学院名称、学生所属学院代号、学生所选课程、学生成绩。

注:以下表格备注中的PK为PRIMARY KEY,即主键;FK为FOREIGN KEY,即外键。

数值的长度为5.1表示总长5位(含小数点),小数占1位,在SQL中用DECIMAL(5,1)表示。

学生表(xs)

字段名字段含义字段类型字段长度NULL备注
xm姓名字符24
xh学号字符10PK
ydh所属学院代号字符2FK
bj班级字符8
chrq出生日期日期
xb性别字符6

课程表(kc)

字段名字段含义字段类型字段长度NULL备注
kcbh课程编号字符3PK
kc课程名称字符24
lx课程类型字符12
xf学分数值5.1

教师表(js)

字段名字段含义字段类型字段长度NULL备注
xm姓名字符24
jsbh教师编号字符10PK
zc职称字符18
ydh所属学院代号字符2FK

学院表(xyb)

字段名字段含义字段类型字段长度NULL备注
ydh学院代号字符2PK
ymc学院名称字符30

授课表(sk)

字段名字段含义字段类型字段长度NULL备注
kcbh课程编号字符3PK,FK1
bh教师编号字符10PK,FK2

学生选课表(xk)

字段名字段含义字段类型字段长度NULL备注
xh学号字符10PK,FK
kcbh课程编号字符3PK,FK1
jsbh教师编号字符10PK,FK1
cj成绩数值5.1

P.S. 本实验部分字段长度设置和原来实验中的要求有一定差异,比如姓名原来字段长度为8,这个实验为24,主要原因是姓名和性别有可能出现中文字符,而一个中文字符会占据3个字节。

实验步骤:

一:购买ECS服务器,然后在ECS服务器安装部署openGauss数据库

参考文档01-1,在华为云上购买ECS服务器,然后安装部署openGauss数据库。

1.登录华为云:

进入华为云官网:https://www.huaweicloud.com/,单击登录。然后进入弹性云服务器ECS界面:

点击“购买弹性云服务器”,进入以下界面:

然后按照以下基础配置进行购买:

配置选项配置值
计费模式按需计费
区域华北-北京四
CPU架构鲲鹏计算
规格最新系列 2vCPUs|4GiB
镜像公共镜像:
openEuler
openEuler 20.03 64bit with ARM(40GB)

其余默认即可,单击“下一步网络配置”。

自定义购买进行网络配置:

配置选项配置值
网络vpc-default(192.168.0.0/16)
弹性公网IP现在购买
公网带宽按流量计费
带宽大小5

然后点击下一步“高级配置”。

这里使用krenz作为云服务器名称。

用户名默认为root,然后输入这个服务器的密码。

推荐把密码保存在本地好记的位置。忘记密码则步骤一要从头开始。

然后点击“确认配置”,确认各个参数是否正确,尤其是配置费用。

按照上述配置搭建服务器的配置费用为¥0.3388/小时,弹性公网IP流量费用为¥0.80/GB。

然后勾选协议“我已经阅读并同意《镜像免责声明》”,点击“立即购买”。

出现以下信息,说明购买成功:

查看云服务器列表:

同时记住这个服务器的弹性公网IP地址。

在这个例子中,弹性公网IP(公有)为114.116.253.47,弹性公网IP(私有)为192.168.0.49

2.使用putty连接ECS服务器

使用putty从本地电脑通过弹性公网IP(114.116.253.47)来连接ECS,使用root用户来登录:

然后会出现以下警告,直接点击“Accept”即可。

使用root用户登录,然后输入密码:

出现以下信息,说明登录成功:

3.设置字符集参数

输入以下命令,在/etc/profile文件中添加“export LANG= en_US.UTF‐8”。

cat >>/etc/profile<<EOFexport LANG=en_US.UTF‐8EOF

然后输入如下命令,使配置修改生效。

source /etc/profile

4.修改python版本并安装libaio包

之后安装过程中openGauss用户互信,openEuler服务器需要用到Python-3.7.x命令,但是默认Python版本为Python-2.7.x,所以需要切换Python版本。

先进入/usr/bin目录,备份python文件。

cd /usr/binmv python python.bak

然后建立python3软连接:

ln -s python3 /usr/bin/python

然后验证python版本。

python -V

出现Python 3.7.4的信息,说明python版本切换成功。

python版本切换成功,后续按照需要libaio包,下载进行安装。

yum install libaio* -y

5.安装openGauss数据库

以root用户登录待安装openGauss的主机,并按规划创建存放安装包的目录。

mkdir -p /opt/software/openGausschmod 755 -R /opt/software

下载数据库安装包到安装目录。

切换到安装目录:

cd /opt/software/openGauss

使用wget下载安装包:

wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.0/arm/openGauss-2.0.0-openEuler-64bit-all.tar.gz

出现以下信息,说明安装成功:

6.创建XML配置文件

切换到存放安装包的目录。

cd /opt/software/openGauss

创建XML配置文件,用于数据库安装:

vi clusterconfig.xml

然后输入“i”进入INSERT模式,添加文本如下:

其中,nodeNames后面的属性改成自己的云服务器名称,这个例子里面是krenz。

backIP1s,backIP1和sshIP1后面的属性均改成自己的弹性公网IP(私有),这个例子里面是192.168.0.49

 <ROOT> <CLUSTER> <PARAM name="clusterName" value="dbCluster" /> <PARAM name="nodeNames" value="krenz" /> <PARAM name="backIp1s" value="192.168.0.49"/> <PARAM name="gaussdbAppPath" value="/opt/gaussdb/app" /> <PARAM name="gaussdbLogPath" value="/var/log/gaussdb" /> <PARAM name="gaussdbToolPath" value="/opt/huawei/wisequery" /> <PARAM name="corePath" value="/opt/opengauss/corefile"/> <PARAM name="clusterType" value="single-inst"/> </CLUSTER> <DEVICELIST> <DEVICE sn="1000001"> <PARAM name="name" value="krenz"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.0.49"/> <PARAM name="sshIp1" value="192.168.0.49"/>  <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="26000"/> <PARAM name="dataNode1" value="/gaussdb/data/db1"/> </DEVICE> </DEVICELIST> </ROOT>

点击“Esc”退出INSERT模式,然后输入“:wq”后回车退出编辑并保存文本。

7.初始化安装环境

修改performance.sh文件。

使用vi打开文件/etc/profile.d/performance.sh,具体如下:

vi /etc/profile.d/performance.sh

输入“i”,进入INSERT模式。用#注释sysctl -w vm.min_free_kbytes=112640 &> /dev/null这行内容。

为确保openssl版本正确,执行预安装前加载安装包中lib库。

执行命令如下,其中packagePath为用户安装包放置的路径,本示例中为/opt/software/openGauss。

vi /etc/profile

输入“i”,进入INSERT模式,在文件的底部添加如下代码,加载安装包中lib库。按下“Esc”退出INSERT模式,输入“:wq”后回车,保存后退出。

export packagePath=/opt/software/openGaussexport LD_LIBRARY_PATH=$packagePath/script/gspylib/clib:$LD_LIBRARY_PATH

配置完成后,使设置生效。

source /etc/profile

在安装包所在的目录下,解压安装包。

cd /opt/software/openGausstar -zxvfopenGauss-2.0.0-openEuler-64bit-all.tar.gztar -zxvfopenGauss-2.0.0-openEuler-64bit-om.tar.gz

解压后,执行ls命令查看内容如下:

使用gs_preinstall准备好安装环境,切换到gs_preinstall命令所在目录。

cd /opt/software/openGauss/script/

执行ls命令查看script中内容。

采用交互模式执行,并在执行过程中创建openGauss omm用户互信:

python gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/clusterconfig.xml

命令中的omm为操作系统用户(同时omm也是openGauss的数据库管理员账号,在下面的1.4.4环节中会创建),dbgrp为运行openGauss的操作系统用户的群组名称,/opt/software/openGauss/clusterconfig.xml为openGauss配置文件路径。

在执行过程中,用户根据提示选择是否创建互信,填写 yes。

此时会创建操作系统omm用户,并对omm创建trust互信,并要求设置密码,建议用户自定义设置密码。

推荐把密码保存在本地好记的位置。如忘记可用passwd修改omm密码。

出现以下信息,说明配置成功:

8.部署openGauss

修改文件权限:

chmod -R 755 /opt/software/openGauss/script

登录到openGauss的主机,并切换到omm用户。

su - omm

出现以下信息,说明切换成功。

然后执行以下命令进行安装:

gs_install -X /opt/software/openGauss/clusterconfig.xml --gsinit-parameter="--encoding=UTF8"--dn-guc="max_process_memory=4GB"--dn-guc="shared_buffers=256MB" --dn-guc="bulk_write_ring_size=256MB" --dn-guc="cstore_buffers=16MB"

参数说明如下:

参数说明
EncodingEncoding
max_process_memory设置一个数据库节点可用的最大物理内存
shared_buffers设置openGauss使用的共享内存大小
bulk_write_ring_size大批量数据写入触发时,该操作使用的环形缓冲区大小
cstore_buffers设置列存所使用的共享缓冲区的大小

然后用户输入密码,设置的密码要符合复杂度要求:

  • 最少包含8个字符;
  • 不能和用户名和当前密码(ALTER)相同,或和当前密码反序;
  • 至少包含大写字母(A-Z),小写字母(a-z),数字,非字母数字字符(限定为~!@#$%^&*()-_=+|[{}];:,/” />

    至此,openGauss数据库已经部署完成。

    9.连接数据库

    我们可以测试数据库是否能够正常连接。

    su - omm

    查看服务是否启动。

    gs_om -t status

    可知现在服务未启动,输入以下命令启动数据库服务:

    gs_om -t start

    然后连接数据库:

    gsql -d postgres -p 26000 -r

    结果显示为如下信息,说明连接成功:

    至此,步骤一正式完成。

    二:了解IAM账号

    在华为云的控制台界面,可以查看“我的凭证”菜单:

    然后在API凭证下方可以看到自己的IAM账号:

    再进入“统一身份认证”菜单:

    然后在接下来的界面可以创建新的IAM账号:

    之后,你可以通过华为的IAM用户登录界面进行登录。

    帐号与IAM用户的关系:

    帐号与IAM用户可以类比为父子关系,帐号是资源归属以及计费的主体,对其拥有的资源具有完全控制权限。

    IAM用户由管理员创建,权限由管理员分配,管理员可以随时修改或者撤销IAM用户的权限。IAM用户进行资源操作时产生的费用统一计入帐号中,IAM用户不需要为资源付费。

    下图是一个比较形象的理解:

    三:安装openEuler虚拟机,并部署openGauss数据库

    参考文档01-3,在VirtualBox上安装openEuler虚拟机,然后安装部署openGauss数据库。

    网盘下载地址:

    实验中的openEuler-20.03-LTS-x86_64-dvd镜像可以通过这个网盘地址下载:

    链接: https://pan.baidu.com/s/1y6KbB3h4DfANn30qSxjn2w

    提取码: syr7

    1.在VirtualBox上创建虚拟机

    先安装VirtualBox,然后打开VirtualBox,点击“新建”:

    虚拟电脑的名称随意,这里使用“Nardack”进行标识。

    类型选择Linux,版本选择Other Linux (64-bit)

    分配的内存大小可以根据电脑的实际情况进行调整,在这个实验是2048MB。

    然后点击“现在创建虚拟硬盘”(默认设置),之后点击“创建”:

    然后之后的操作全部采用默认配置:


    出现以下信息说明创建虚拟机成功:

    2.配置虚拟机并安装openEuler镜像

    在上述界面点击“设置”,配置虚拟机:

    在设置页面上点击“系统”,进行系统设置,在启动顺序中把“光驱”、“硬盘”移动至第一、二启动,“软驱”去掉勾选,具体如下:

    处理器中,CPU设置为2,具体如下:

    点击“存储”设置项,选择光盘并在分配光驱后面点击加载按钮将前面下载的openEuler-20.03-LTS-x86_64-dvd.iso文件加载至光驱中,具体如下:


    点击“网络”设置项,这里用到两张网卡,网卡1连接方式下拉选择为“仅主机(Host-Only)网络”,主要用于本地电脑与虚拟电脑相连,具体如下:

    网卡2设置,勾选“启用网络连接”,并且连接方式下拉选择为“网络地址转换(NAT)”,主要用于虚拟电脑与互联网相连,具体如下:

    点击“启动”按钮,进行系统安装:

    3.在虚拟机中完成openEuler配置

    在自检界面按下“Esc”键跳过自检,然后进入如下界面。语言选择中文->简体中文(中国),然后点击“继续”:

    在此页面,点击“安装位置”先进行分区,具体如下:

    选择“自定义”,然后点击“完成”:

    下拉选择“标准分区”,然后点击“点击这里自动创建他们”:

    点击“完成”,进入下一步设置:

    点击“接受更改”,完成分区设置后会进入安装信息摘要页面,具体如下图:

    在安装信息摘要页面,点击“网络和主机名”进行网络和主机名设置,具体如下:

    分别针对两张网卡进行设置,如“以太网(enpOs3)”网卡,先点击“关闭”边上的按钮把网卡打开。

    接着设置主机名,在这个例子里面,我们用Nardack标识当前主机名,并点击“应用(A)”,然后点击“配置”:

    在配置页中,选择“常规”,然后勾选“可用时自动链接到这个网络”,接着点击“保存”:

    然后参照第一张网卡相同的“常规”配置,对第二个网卡进行配置:

    然后点击“完成”进入安装信息摘要页面:

    在安装信息摘要页面,点击“软件选择”进行软件安装设置。

    在此页面选择“虚拟化主机”,并在右边勾选“Linux的远程管理”、“开发工具”、“安全性工具”、“系统工具”。然后点击“完成”:

    设置结束,点击“开始安装”,具体如下:

    在安装的同时,我们点击“Root密码®”,进行root密码设置,然后点击“完成”:

    推荐把密码保存在本地好记的位置。忘记密码则步骤三要从头开始。

    之后等待系统安装完成。

    出现此界面表示,系统安装完成,然后点击“重启”,但此时要调整系统从硬盘启动。

    先关闭VM运行窗口,如下:

    之后将“光驱”去掉勾选,并设置成从硬盘启动:

    重启后,要求输入用户名及密码,这里用root用户登录,并输入刚才的密码:

    出现以下信息,说明登录成功:

    4.确认网络,操作系统环境准备

    使用

    ifconfig

    指令查看两个网卡是否正常启动:

    同时记录两个网卡的ip:

    enp0s3: 192.168.56.104

    enp0s8: 10.0.3.15

    然后我们检查外网是否能正常连接,例如,执行以下命令:

    ping baidu.com

    然后按Ctrl+C组合键退出:

    为了方便复制粘贴,使用putty从本地电脑通过配置enp0s3网卡的IP地址192.168.56.104来连接虚拟机,并使用root用户来登录:

    之后可能会出现以下提示,直接点击“Accept”即可:

    先关闭防火墙,执行以下二个命令将防火墙关闭:

    systemctl stop firewalld.servicesystemctl disable firewalld.service

    然后设置字符集及环境变量:

    cat >>/etc/profile<<EOFexport LANG=en_US.UTF‐8export packagePath=/opt/software/openGaussEOFsource /etc/profile
    cat >>/etc/profile<<EOFexport LD_LIBRARY_PATH=$packagePath/script/gspylib/clib:$LD_LIBRARY_PATHEOFsource /etc/profile

    之后验证变量是否生效:

    echo $LD_LIBRARY_PATH

    如果显示/opt/software/openGauss/script/gspylib/clib:,说明配置变量生效:

    之后关闭swap交换内存:

    swapoff -a

    执行如下命令打开performance.sh文件,用#注释sysctl -w vm.min_free_kbytes=112640 &> /dev/null,键入“ESC”键进入指令模式,执行:wq保存并退出修改:

    vi /etc/profile.d/performance.sh

    然后准备yum环境。

    备份原有的yum配置文件,然后下载可用源的repo文件:

    mv /etc/yum.repos.d/openEuler_x86_64.repo /etc/yum.repos.d/openEuler_x86_64.repo.bakcurl -o /etc/yum.repos.d/openEuler_x86_64.repo https://mirrors.huaweicloud.com/repository/conf/openeuler_x86_64.repo

    查看repo文件内容是否正确:

    cat /etc/yum.repos.d/openEuler_x86_64.repo

    显示内容为:

    [openEuler-source]name=openEuler-sourcebaseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/enabled=1gpgcheck=1gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler[openEuler-os]name=openEuler-osbaseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/enabled=1gpgcheck=1gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/RPM-GPG-KEY-openEuler[openEuler-everything]name=openEuler-everythingbaseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/enabled=1gpgcheck=1gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/RPM-GPG-KEY-openEuler[openEuler-EPOL]name=openEuler-epolbaseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/EPOL/x86_64/enabled=1gpgcheck=0

    之后安装相关的包:

    yum install libaio* -yyum install libnsl* -y

    和步骤一类似,设置默认Python版本为3.x:

    cd /usr/binmv python python.bakln -s python3 /usr/bin/pythonpython -V

    创建存放数据库的安装目录:

    mkdir -p /opt/software/openGausscd /opt/software/openGauss

    5.在openEuler虚拟机上安装openGauss数据库:

    创建XML配置文件,用于数据库安装:

    vi clusterconfig.xml

    之后将以下内容添加进clusterconfig.xml文件中:

    其中,nodeNames后面的属性改成自己的主机名称,这个例子里面是Nardack。

    backIP1s,backIP1和sshIP1后面的属性均改成enp0s8的网卡IP,这个例子里面是10.0.3.15

     <ROOT> <CLUSTER> <PARAM name="clusterName" value="dbCluster" /> <PARAM name="nodeNames" value="Nardack" /> <PARAM name="backIp1s" value="10.0.3.15"/> <PARAM name="gaussdbAppPath" value="/opt/gaussdb/app" /> <PARAM name="gaussdbLogPath" value="/var/log/gaussdb" /> <PARAM name="gaussdbToolPath" value="/opt/huawei/wisequery" /> <PARAM name="corePath" value="/opt/opengauss/corefile"/> <PARAM name="clusterType" value="single-inst"/> </CLUSTER> <DEVICELIST> <DEVICE sn="1000001"> <PARAM name="name" value="Nardack"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="10.0.3.15"/> <PARAM name="sshIp1" value="10.0.3.15"/> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="26000"/> <PARAM name="dataNode1" value="/gaussdb/data/Nardack"/> </DEVICE> </DEVICELIST> </ROOT>

    之后,使用wget下载数据库安装包到安装包目录:

    cd /opt/software/openGausswgethttps://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.0/x86_openEuler/openGauss-2.0.0-openEuler-64bit-all.tar.gz

    下载成功显示如下:

    在安装包所在的目录下,解压安装包:

    tar -zxvf openGauss-2.0.0-openEuler-64bit-all.tar.gztar -zxvf openGauss-2.0.0-openEuler-64bit-om.tar.gz

    之后用ls命令查看如下:

    之后我们更改权限:

    chmod 755 -R /opt/software

    然后执行初始化脚本:

    期间会创建操作系统omm用户及要求设置密码,建议用户自定义设置密码。

    推荐把密码保存在本地好记的位置。如忘记可用passwd修改omm密码。

    cd /opt/software/openGauss/scriptpython gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/clusterconfig.xml

    当返回Preinstallation succeeded内容时,表明初始化完成。

    init 6重启下虚拟机(主要是为了释放一些内存资源)。

    此时putty的连接会断开,因此需要重新连接。我们先在VirtualBox中重新登录root账号:

    之后再使用putty远程连接:

    先更新权限:

    chmod 755 -R /opt/software

    su - ommcd /opt/software/openGauss/scriptgs_install -X /opt/software/openGauss/clusterconfig.xml --gsinit-parameter="--encoding=UTF8"--dn-guc="max_process_memory=2GB" --dn-guc="shared_buffers=128MB" --dn-guc="bulk_write_ring_size=128MB" --dn-guc="cstore_buffers=16MB"

    各参数的含义已经在步骤一中说明。

    和步骤一一样,系统会让你输入数据库密码。

    推荐把密码保存在本地好记的位置。忘记密码则步骤三要从头开始。

    出现以下信息,说明安装成功:

    之后清理安装包:

    exitcd /opt/software/openGauss/rm -rf openGauss-2.0.0-openEuler-64bit-all.tar.gzrm -rf openGauss-2.0.0-openEuler-64bit-om.tar.gz

    至此,openGauss数据库已经部署完成。

    6.连接数据库

    我们可以测试数据库是否能够正常连接。

    su - omm

    查看服务是否启动。

    gs_om -t status

    如果服务未启动,则执行以下命令启动数据库:

    gs_om -t start

    然后连接数据库:

    gsql -d postgres -p 26000 -r

    当结果显示为如下信息,则表示连接成功:

    其中,postgres为openGauss安装完成后默认生成的数据库。初始可以连接到此数据库进行新数据库的创建。26000为数据库主节点的端口号,需根据openGauss的实际情况做替换,请确认连接信息获取。

    四:创建用户自定义数据库

    为了之后使用DataStudio连接方便,我们需要自己创建一个用户,以及他对应的数据库。

    在openGauss命令行下,运行以下语句,创建一个名称为ds_nardack的用户,其中{YourPassword}换成你的密码:

    CREATE USER ds_nardack WITH PASSWORD "{YourPassword}";

    这个用户会在之后使用DataStudio连接时用到。

    之后我们创建一个名称为db_nardack的数据库:

    CREATE DATABASE db_nardack OWNER ds_nardack;

    之后我们运行\q退出数据库,然后用新用户登录这个数据库。其中{YourPassword}换成你的密码:

    gsql -d db_nardack -p 26000 -U ds_nardack -W {YourPassword} -r

    至此,用户自定义数据库创建成功。在之后的实验中我们就可以使用DataStudio连接这个数据库。

    五:建立“学籍与成绩管理系统”表格

    我们先定义好我们需要的sql语句,保存至本地系统,名称为Create_Table.sql

    本次实验需要的sql源码如下:

    DROP TABLE IF EXISTS xk;DROP TABLE IF EXISTS sk;DROP TABLE IF EXISTS js;DROP TABLE IF EXISTS kc;DROP TABLE IF EXISTS xs;DROP TABLE IF EXISTS xyb;CREATE TABLE xyb(ydh VARCHAR(2) NOT NULL,ymc VARCHAR(30) NOT NULL,CONSTRAINT xyb_pkey PRIMARY KEY (ydh));CREATE TABLE xs(xm VARCHAR(24) NOT NULL,xh VARCHAR(10) NOT NULL,ydh VARCHAR(2),bj VARCHAR(8),chrq DATE,xb VARCHAR(6),CONSTRAINT xs_pkey PRIMARY KEY (xh),CONSTRAINT xs_fkey FOREIGN KEY (ydh) REFERENCES xyb(ydh));CREATE TABLE kc(kcbh VARCHAR(3) NOT NULL,kc VARCHAR(48) NOT NULL,lx VARCHAR(12),xf DECIMAL(5,1),CONSTRAINT kc_pkey PRIMARY KEY (kcbh));CREATE TABLE js(xm VARCHAR(24) NOT NULL,jsbh VARCHAR(10) NOT NULL,zc VARCHAR(18),ydh VARCHAR(2),CONSTRAINT js_pkey PRIMARY KEY (jsbh),CONSTRAINT js_fkey FOREIGN KEY (ydh) REFERENCES xyb(ydh));CREATE TABLE sk(kcbh VARCHAR(3) NOT NULL,bh VARCHAR(10) NOT NULL,CONSTRAINT sk_pkey PRIMARY KEY (kcbh,bh),CONSTRAINT sk_fkey_1 FOREIGN KEY (kcbh) REFERENCES kc(kcbh),CONSTRAINT sk_fkey_2 FOREIGN KEY (bh) REFERENCES js(jsbh));CREATE TABLE xk(xh VARCHAR(10) NOT NULL,kcbh VARCHAR(3) NOT NULL,jsbh VARCHAR(10) NOT NULL,cj DECIMAL(5,1),CONSTRAINT xk_pkey PRIMARY KEY (xh,kcbh,jsbh),CONSTRAINT xk_fkey_1 FOREIGN KEY (xh) REFERENCES xs(xh),CONSTRAINT xk_fkey_2 FOREIGN KEY (kcbh,jsbh) REFERENCES sk(kcbh,bh));

    接下来说明源码中的一些细节:

    1. DROP TABLE IF EXISTS代表如果对应名称的表存在才删除,这样做的目的是防止出现未定义问题。

    2. DECIMAL(5,1)代表长度为5,小数点占1位的小数。

    3. CONSTRAINT name_a PRIMARY KEY (a,b)代表对应名称为name_a的主键约束,包含两个主键a,b。为了代码格式统一,对于只含有一个主键的约束也使用CONSTRAINT定义约束名称。

    4. CONSTRAINT name_a FOREIGN KEY (a,b) REFERENCES table(c,d)代表对应名称为name_a的外键约束,包含两个外键a,b以及另一个表table对应的两个主键属性c,d需要特别注意的是只有在另一个table定义好之后才可以规定外键约束

    5. 特别注意CREATE TABLE以及DROP TABLE IF EXISTS的顺序。由于外键约束的存在,在定义外键约束时,REFERENCES后的表必须已经被定义。同理,在执行DROP TABLE语句时,必须确保不存在其他表的外键指向这个表。因此,创建各个表的顺序依次是:xyb -> xs -> kc -> js -> sk -> xk,而删除顺序与之刚好相反。

    在以下的步骤中,为了方便调用相关语句,这里采用在omm用户下创建sql文件后,在opengauss中使用\i命令运行sql文件执行。

    在omm用户文件夹下,创建Create_Table.sql文件:

    vi Create_Table.sql

    然后把上述实验源码复制到这个sql文件中:

    执行:wq保存文件,之后进入db_nardack数据库(这里使用默认用户即可):

    gsql -d db_nardack -p 26000

    然后执行以下语句运行sql源码(\i调用sql语句的默认路径就在home\omm文件夹下):

    \i Create_Table.sql;

    重复运行上述语句,可以看到各个表已经被依次删除然后重新建立,各个表之间的主键和外键约束也已经确定:

    六:建立表之间的索引

    通过对于上述各个表的分析,我们意识到有以下数据可以建立索引:

    • 每个表的主键

    • 学生姓名,因为数据数量级较大(在1k左右),且查询频率非常高。

    • 选课列表的(学号,课程编号,教师编号数据)三元组,因为数据的数量级非常大(在1w以上),且查询频率较高。

    同时,因为openGauss会自动对主键建立索引,因此主键的索引不需要我们手动进行建立。

    我们新建Create_Index.sql文件,填写以下源码:

    DROP INDEX IF EXISTS xm_index;DROP INDEX IF EXISTS xk_index;CREATE INDEX xm_index ON xs(xm);CREATE UNIQUE INDEX xk_index ON xk(xh,kcbh,jsbh);

    \i Create_Index.sql;

    重复运行以上语句,发现这两个索引已经建立好:

    至此,建立数据库,“学籍与成绩管理系统”表格以及建立适当索引的工作已经完成。