「Dameng」达梦数据库入门(从安装到简单使用)

1,922 阅读13分钟

本文写于:2024年6月29日:“梗” 提示

dameng-long.png

🙏废话不多说系列,直接开整🙏

一、介绍

转存失败,建议直接上传图片文件 达梦数据库(Dameng Database)是中国达梦公司(DM)开发的一种关系型数据库管理系统(RDBMS)。它是一种高性能、高可靠性的数据库系统,被广泛应用于企业级应用和大型数据处理环境中。

转存失败,建议直接上传图片文件

以下是达梦数据库的一些特点和功能

1. 高性能:达梦数据库采用了多种优化技术,包括并行查询、分布式处理和高效的存储引擎,以实现高性能的数据处理和查询。

2. 高可靠性:达梦数据库具有高度的可靠性和稳定性,支持事务处理和数据恢复机制,以确保数据的完整性和安全性。

3. 分布式数据库:达梦数据库支持分布式数据库架构,可以实现数据的分布式存储和处理,以满足大规模数据处理和高并发访问的需求。

4. 多样化的数据类型和功能:达梦数据库支持多种数据类型和丰富的数据库功能,包括存储过程、触发器、用户定义的函数等,以满足不同应用场景的需求。

5. 兼容性:达梦数据库兼容多种标准的 SQL 语法和数据库接口,可以与各种应用程序和开发工具无缝集成。

总的来说,达梦数据库是一种成熟、稳定且功能丰富的关系型数据库管理系统,适用于各种企业级应用和大规模数据处理环境。

二、安装部署

(1)环境说明

【提醒】CentOS 8 已经在 2021 年底结束了其标准支持周期,并且官方仓库可能不再提供所有软件包或更新。你可能需要考虑迁移到 CentOS Stream 8(CentOS 的继任者)或其他支持的 Linux 发行版。

安装到 Linux (CentOS 8 系统)可以安装到 CentOS 7系统,目前(2024年6月27日)是不受影响的。

【Centos现状】
1. CentOs Linux 8 在 2021 年底停止更新;
2. Centos Linux 7 用户较多,这个版本将在 【2024 年6月 30 日】停止支持;
3. 未来社区不会再有 CentOs Linux 的新版本,只有 Centos stream 不断向前发展。
上述的这些情况,红帽建议广大 Centos Linux 用户提前行动起来,尽快选择一条适合的路径开始迁移工作。
【Centos替代之路】
1. 转向其他社区免费版本:Rocky Linux、Ubuntu转向国内外发行版,如 SUSE、Amazon Linux 2

CentOS 8 系统如下:

[root@localhost ~]# hostnamectl
   Static hostname: localhost.localdomain
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 045cc2bb2cb74b2e9eb34861996c0ac0
           Boot ID: e0f17a6ddd854c4bb4cd73cd999c17eb
    Virtualization: vmware
  Operating System: CentOS Linux 8
       CPE OS Name: cpe:/o:centos:centos:8
            Kernel: Linux 4.18.0-348.7.1.el8_5.x86_64
      Architecture: x86-64
## 更新 unzip 指令(可选操作)
[root@localhost ~]# sudo yum update unzip
CentOS Linux 8 - AppStream                                                                                            5.5 kB/s | 4.3 kB     00:00
CentOS Linux 8 - BaseOS                                                                                               5.0 kB/s | 3.9 kB     00:00
CentOS Linux 8 - Extras                                                                                               1.9 kB/s | 1.5 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                                                                        9.3 kB/s | 6.8 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                                                                        1.4 MB/s |  14 MB     00:09
Dependencies resolved.
Nothing to do.
Complete!

DM8 Linux 系统安装包下载地址:download.dameng.com/eco/adapter…

下载下来的解压安装包(解压内容如下):

image.png

将两个文件上传到 Linux 服务器上留作备用。

(2)为达梦数据库创建用户组和用户

image.png

$ sudo groupadd dinstall
$ sudo useradd -g dinstall dmdba

(3)开始安装

【1】上传并解压

① 上传安装包(dm8_20230418_x86_rh6_64.zip 和 dm8_20230418_x86_rh6_64.iso)到 Linux 服务器。

② 解压 dm8_20230418_x86_rh6_64.zip(如果是 dm8_20230418_x86_rh6_64.iso ,那么则无需解压安装);

# 1.创建目录
$ mkdir /root/dm8_20230418_x86_rh6_64
# 2.上传 zip 包到 /root/dm8_20230418_x86_rh6_64 目录中
# 3.解压 zip
$ sudo unzip /root/dm8_20230418_x86_rh6_64/dm8_20230418_x86_rh6_64.zip
Archive:  /root/dm8_20230418_x86_rh6_64/dm8_20230418_x86_rh6_64.zip
  inflating: dm8_20230418_x86_rh6_64.iso_SHA256.txt
  inflating: dm8_20230418_x86_rh6_64.iso
[root@localhost dm8_20230418_x86_rh6_64]#
【2】安装达梦数据库介质ISO

③ 设置 达梦数据库安装介质(可以是 ISO  / 7z),这里以 ISO 为例。

# 设置iso文件到 /mnt 目录下:
$ sudo mount -o loop,rw /root/dm8_20230418_x86_rh6_64/dm8_20230418_x86_rh6_64.iso /mnt

## 实例
[root@localhost dm8_20230418_x86_rh6_64]# sudo mount -o loop,rw /root/dm8_20230418_x86_rh6_64/dm8_20230418_x86_rh6_64.iso /mnt
mount: /mnt: /root/dm8_20230418_x86_rh6_64/dm8_20230418_x86_rh6_64.iso is already mounted.
【3】挂在目录运行安装脚本

④ 进入挂载目录,并运行安装脚本。

$ cd /mnt
$ sudo ./DMInstall.bin

## 【问题1】出现问题,是因为达梦数据库需要 dmdba 用户,所以需要先按照上述创建 用户组和用户再去运行安装脚本。
[root@localhost mnt]# sudo ./DMInstall.bin
OS user dmdba is not detected, please check whether the OS user dmdba exist!
图形化引导

⑤ 安装过程中会有图形化界面引导,按照提示选择选项和数据库即可。

之后就是出现安装引导弹窗,如下图:

image.png

image.png

image.png

指定 达梦的 KEY 文件

image.png

典型安装

image.png

配置在Linux服务的安装位置

image.png

安装前的小结

image.png

接下来就是 静静的等待安装完成即可。如下图所示安装完成:

image.png

image.png

【4】数据库初始化

⑥ 数据库初始化(可选)

这里我也演示一下。

image.png

创建数据库模板

image.png

配置指定数据库目录

image.png

配置数据库标识

① 达梦数据库服务端口:5236;② 数据库名 DAMENT; ③ 实例名:DMSERVER;

image.png

配置数据库文件

image.png

image.png

数据库的文件 - 安装目录:

  1. 控制文件:/opt/dmdbms/data/DAMENG/dm.ctl
  2. 数据文件:
    1. SYSTEM 表空间:/opt/dmdbms/data/DAMENG/SYSTEM.DBF
    2. MAIN 表空间:/opt/dmdbms/data/DAMENG/MAIN.DBF
    3. ROLL 表空间:/opt/dmdbms/data/DAMENG/ROLL.DBF
    4. TEMP 表空间:/opt/dmdbms/data/DAMENG/TEMP.DBF
配置数据库的初始化参数
  1. 字符集:建议 UTF-8;
  2. 字符串比较大小写敏感,建议设置不敏感。
  3. 其他:后期视情况调整对应的配置即可。

image.png

配置口令(sysdba 和 sysauditor)

(密码建议 ① 长度 9;②大小写字符、数字 混用;)

image.png

配置示例库(用户测试和练习达梦数据库SQL)

image.png

最后,得到初始化数据库的配置 摘要信息:(具体如下)

数据库名:		DAMENG
实例名:		DMSERVER
数据库目录:		/opt/dmdbms/data
端口:			5236

控制文件:
/opt/dmdbms/data/DAMENG/dm.ctl

数据文件:
/opt/dmdbms/data/DAMENG/SYSTEM.DBF
/opt/dmdbms/data/DAMENG/ROLL.DBF
/opt/dmdbms/data/DAMENG/TEMP.DBF
/opt/dmdbms/data/DAMENG/MAIN.DBF

日志文件:
/opt/dmdbms/data/DAMENG/DAMENG01.log
/opt/dmdbms/data/DAMENG/DAMENG02.log

ELOG:
/opt/dmdbms/data/DAMENG/

簇大小:			16页
页大小:			8K
日志文件大小:		256M
时区设置:			-07:00
页面检查:			不启用
字符集:			UTF-8
USBKEY-PIN:			
页分片大小:		512
标识符大小写敏感:		否
VARCHAR以字符为单位:	否
空格填充模式:		否
改进的字符串HASH算法:	是
启用日志文件加密:		否
启用全库加密:		否

启用加密:		否

修改 SYSDBA的口令
修改 SYSAUDITOR的口令

创建示例库BOOKSHOP
创建示例库DMHR

直接创建数据库示例:

image.png

image.png

直接完成即可。此时可以看到 Linux 命令窗口中的内容如下:

[root@localhost mnt]# sudo ./DMInstall.bin
Extract install files.........
(SWT:8846): GLib-CRITICAL **: 01:09:37.803: Source ID 6841 was not found when attempting to remove it
2024-06-27 01:11:52
[INFO] 安装达梦数据库...
2024-06-27 01:11:53
[INFO] 安装 基础 模块...
2024-06-27 01:16:28
[INFO] 安装 服务器 模块...
2024-06-27 01:17:23
[INFO] 安装 客户端 模块...
2024-06-27 01:22:32
[INFO] 安装 驱动 模块...
2024-06-27 01:25:07
[INFO] 安装 手册 模块...
2024-06-27 01:25:22
[INFO] 安装 服务 模块...
2024-06-27 01:25:22
[INFO] 清理安装产生临时文件。
2024-06-27 01:25:22
[INFO] 移动日志文件。
2024-06-27 01:25:23
[INFO] 正在启动DmAPService服务...
2024-06-27 01:25:23
[INFO] 启动DmAPService服务成功。
2024-06-27 01:25:23
[INFO] 安装达梦数据库完成。
[INFO] 安装达梦数据库完成。

⑦ 安装完成后,还需要记得开放端口外部才能访问连接到数据库哦

(4)开放达梦数据库服务端口 5236

# 开放防火墙端口指令
## 1.显示以开放的端口
$ firewall-cmd --list-ports
## 2.配置5236端口可被外部访问
$ firewall-cmd --permanent --zone=public --add-port=5236/tcp
## 3.刷新重载防火墙端口
$ firewall-cmd --reload

(5)外部连接DM8数据库

image.png

可见连接测试通过。(账号密码:sysdba / sysdba123456   另一个账号密码:sysauditor / sysauditor)接下来就可以愉快的学习了,附赠直达学习地址:产品手册 | 达梦技术文档 (dameng.com)

(6)卸载 达梦数据库

找到达梦的安装目录 (这里是 /opt/dmdbms/)下,直接执行:(图形化卸载)

sh ./uninstall.sh
## 或者是 
sh /opt/dmdbms/uninstall.sh

## 执行之后,会出现图形化界面让确认是否卸载达梦数据库

image.png

三、基本 DM_SQL 操作

(1)查询 达梦数据库 的基本信息

官方文档直达:结构化查询语言 DM_SQL 简介 | 达梦技术文档 (dameng.com)eco.dameng.com/document/dm…

这里简单的说明一下,重要的提点介绍下:

  1. 特点:DM_SQL 语言符合结构化查询语言 SQL 标准,是标准 SQL 的扩充。
    1. 功能一体化:一体化定义、一体化存储、一体化检索、一体化处理,最大限度地提高了数据库管理系统处理多媒体的能力和速度;

    2. 两种用户接口使用统一语法结构的语言:作为自含式语言,它能独立运行于联机交互方式。作为嵌入式语言,DM_SQL 语句能够嵌入到 C 和 C++ 语言程序中。

    3. 高度非过程化:用户只需指出“做什么”,而不需指出“怎么做”,对数据存取路径的选择以及 DM_SQL 语句功能的实现均由系统自动完成,与用户编制的应用程序与具体的机器及关系 DBMS 的实现细节无关,从而方便了用户,提高了应用程序的开发效率,也增强了数据独立性和应用系统的可移植性。

    4. 面向集合的操作方式:不仅查询结果可以是元组的集合,而且一次插入、删除、修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言 (一次只能操作一条记录) 来说,DM_SQL 语言的使用简化了用户的处理,提高了应用程序的运行效率。

    5. 语言简洁、方便易学:

(2)DDL:表结构的调整学习

官方文档直达:数据定义语句 | 达梦技术文档 (dameng.com)eco.dameng.com/document/dm…

(3)DML:针对表的基本增删改查

提醒:基于上述安装步骤的配置了数据库示例库,得到的查询演示示例,如下:

【1】基本查询示例
-- 1.查询所有
select * from CITY c ; -- 查询表所有数据并显示全部字段内容
select * from CITY c order by REGION_ID desc; -- 降序
select * from CITY c order by REGION_ID desc, CITY_ID ASC ; -- 降序再升序
select * from CITY c order by REGION_ID desc, CITY_ID DESC ; -- 降序降序

-- 2.分页查询
select * from CITY c limit 3;-- 分页
select * from CITY c limit 2,3;-- 跳页面分批次查询

-- 3.比较谓词查询
select * from CITY c where c.REGION_ID in (2, 3); -- 指定范围
select * from CITY c where c.REGION_ID = 2; -- 等于
select * from CITY c where c.REGION_ID != 2;-- 不等于
select * from CITY c where c.REGION_ID <> 2; -- 不等于
select * from CITY c where c.REGION_ID < 4;
select * from CITY c where c.REGION_ID >= 2 and c.REGION_ID <= 4;
select * from CITY c where  c.REGION_ID BETWEEN 2 and 4;

-- 4.模糊查询
select * from CITY c where c.CITY_ID like 'S%';-- 右模糊
select * from CITY c where c.CITY_ID like '%S';-- 左模糊
select * from CITY c where c.CITY_ID like '%S%';-- 全模糊查询
select * from CITY c where c.CITY_NAME like '%长%'; -- 全模糊中文查询

-- 5.【※】还支持通过 ROW 保留字对表或视图进行 LIKE 计算。该查询依次对表或视图中所有字符类型的列进行 LIKE 计算,只要有一列符合条件,则返回 TRUE。
SELECT * FROM PRODUCTION.PRODUCT_REVIEW WHERE  PRODUCT_REVIEW.ROW LIKE '%刘青%';
SELECT * FROM PRODUCTION. PRODUCT_REVIEW WHERE NAME LIKE '%刘青%' OR EMAIL LIKE '%刘青%' OR COMMENTS LIKE '%刘青%';

-- 6.使用 NULL 来查询
SELECT NAME, SEX, PHONE FROM PERSON.PERSON WHERE EMAIL IS NULL;
SELECT NAME, SEX, PHONE FROM PERSON.PERSON WHERE EMAIL IS NOT NULL;

-- 7.组合逻辑查询
SELECT NAME, AUTHOR FROM PRODUCTION.PRODUCT WHERE NOWPRICE < 15 AND DISCOUNT < 7 OR PUBLISHER='人民文学出版社';

【2】函数查询示例
  1. 统计总数,常见的聚合函数指标(AVG|MAX|MIN|SUM|COUNT);
  2. 方差,协方差,首行记录;
-- 第一类:统计总数 count(*)
-- 相异集函数 AVG|MAX|MIN|SUM|COUNT(DISTINCT<列名>);
SELECT 
	avg(c.NOWPRICE) -- 书本平均价格
	, max(c.NOWPRICE)
	, min(c.NOWPRICE)
	, SUM(c.NOWPRICE)
	, COUNT(distinct c.NOWPRICE) 
	, count(c.NOWPRICE)
from PRODUCTION.PRODUCT c
	
-- 3.完全集函数 AVG|MAX|MIN| COUNT|SUM([ALL]<值表达式>);
-- 3.1 求折扣小于 8 的图书的平均现价。
SELECT AVG(NOWPRICE) FROM PRODUCTION.PRODUCT WHERE DISCOUNT < 8;
-- 3.2 求折扣大于 8 的图书的总价格。
select AVG(nowprice) from PRODUCTION.PRODUCT where discount >  8 ;

-- 3.3 查询已登记供应商的个数。
SELECT COUNT(*) FROM PURCHASING.VENDOR;

-- 3.4 查询目前销售的图书的出版商的个数。
select count(DISTINCT PUBLISHER) from PRODUCTION.PRODUCT ;

-- 4.求方差集函数 VARIANCE、标准差函数 STDDEV 和样本标准差函数 STDDEV_SAMP
-- 4.1 求图书的现价方差。
SELECT VARIANCE(NOWPRICE) FROM PRODUCTION.PRODUCT; -- 方差
select round(VARIANCE(NOWPRICE),2) from PRODUCTION.PRODUCT; -- 四舍五入保留两位有效位数
-- 4.2 求图书的现价标准差。
SELECT STDDEV(NOWPRICE) FROM PRODUCTION.PRODUCT; -- 标准差
SELECT round(STDDEV(NOWPRICE),2) FROM PRODUCTION.PRODUCT; -- 标准差

-- 5.求总体协方差集函数 COVAR_POP、样本协方差函数 COVAR_SAMP 和相关系数 CORR
-- 5.1 例 1 求产品原始价格 ORIGINALPRICE 和当头销售价格 NOWPRICE 的总体协方差。
SELECT COVAR_POP(ORIGINALPRICE, NOWPRICE) FROM PRODUCTION.PRODUCT;
-- 5.2 求产品原始价格 ORIGINALPRICE 和当头销售价格 NOWPRICE 的样本协方差。
SELECT COVAR_SAMP(ORIGINALPRICE, NOWPRICE) FROM PRODUCTION.PRODUCT;


-- 6. 首行函数 FIRST_VALUE
-- 6.1 例 返回查询项的首行记录。
select * from PRODUCTION.PRODUCT;
SELECT FIRST_VALUE(NAME) FROM PRODUCTION.PRODUCT;
select name from PRODUCTION.PRODUCT p order by p.PRODUCTID asc limit 1
【3】DM_SQL 重点特有函数
-- 【重点】区间最大值
--7. 求区间范围内的最大值函数 area_max
-- 7.1 例 求图书的现价在 20~30 之间的最大值。
SELECT area_max(NOWPRICE,20,30) FROM PRODUCTION.PRODUCT;

-- 【重点】8.求 FIRST/LAST 集函数
-- 8.1 求每个用户最早定的商品中花费最多和最少的金额。
select CUSTOMERID
	, max(TOTAL) keep (dense_rank first order by ORDERDATE) max_val
	, min(TOTAL) keep (dense_rank first order by ORDERDATE) min_val 
	from SALES.SALESORDER_HEADER
group by CUSTOMERID;
-- 8.1查询结果
CUSTOMERID    MAX_VAL    MIN_VAL
----------------------------
1             36.9000    36.9000

--9.2 例 2 求每个出版社出版的所有图书。
-- 先根据出版社进行分组,然后将每个出版社出版的图书名用“,”拼接起来,使用 WM_CONCAT。
SELECT PUBLISHER, WM_CONCAT(NAME) FROM PRODUCTION.PRODUCT GROUP BY PUBLISHER;
-- 查询结果:
PUBLISHER            WM_CONCAT(NAME)
------------------ ----------------------------------
中华书局               红楼梦,水浒传
上海出版社             老人与海
广州出版社             射雕英雄传(全四册)
                       鲁迅文集(小说、散文、杂文)全两册
人民文学出版社         长征
清华大学出版社         数据结构(C语言版)(附光盘)
机械工业出版社         工作中无小事
外语教学与研究出版社   突破英文基础词汇
21世纪出版社          噼里啪啦丛书(全7册)
【4】交叉查询
-- (1)无过滤查询:
SELECT T1.HAIRDATE, T2.SALESLASTYEAR
FROM RESOURCES.EMPLOYEE T1
CROSS JOIN SALES.SALESPERSON T2;

-- (2)有过滤条件查询:查询性别为男性的员工的姓名与职务。
SELECT T1.NAME, T2.TITLE
FROM PERSON.PERSON T1, RESOURCES.EMPLOYEE T2
WHERE T1.PERSONID = T2.PERSONID AND T1.SEX = 'M';

-- 自然连接
SELECT T1.HAIRDATE, T2.SALESLASTYEAR 
FROM RESOURCES.EMPLOYEE T1  
NATURAL JOIN SALES.SALESPERSON T2;
-- 查询结果:
HAIRDATE    SALESLASTYEAR
----------  -------------
2002-05-02  10.0000
2002-05-02  20.0000

-- 方式2:自然连接 JOIN...USING() 查询
SELECT
	HAIRDATE,
	SALESLASTYEAR
FROM
	RESOURCES.EMPLOYEE
JOIN SALES.SALESPERSON USING(EMPLOYEEID);
【5】自连接、内连接、外连接

数据表与自身进行连接,我们称这种连接为自连接。

自连接查询至少要对一张表起别名,否则,服务器无法识别要处理的是哪张表。

例 对 PURCHASING.VENDOR 表进行自连接查询

SELECT T1.NAME, T2.NAME, T1.ACTIVEFLAG
FROM PURCHASING.VENDOR T1, PURCHASING.VENDOR T2
WHERE T1.NAME = T2.NAME;

-- 内连接:根据连接条件,结果集仅包含满足全部连接条件的记录,我们称这样的连接为内连接。
-- 例 从 PRODUCT_CATEGORY、PRODUCT_SUBCATEGORY 中查询图书的目录名称和子目录名称。
SELECT T1.NAME, T2.NAME
FROM  PRODUCTION.PRODUCT_CATEGORY T1  INNER JOIN 
PRODUCTION.PRODUCT_SUBCATEGORY T2
ON T1.PRODUCT_CATEGORYID = T2.PRODUCT_CATEGORYID;

-- 外连接:外连接对结果集进行了扩展,会返回一张表的所有记录,对于另一张表无法匹配的字段用 NULL 填充返回。
--        DM 数据库支持三种方式的外连接:左外连接、右外连接、全外连接。
-- 左外连接:例 1 从 PRODUCT_CATEGORY、PRODUCT_SUBCATEGORY 中查询图书的所有目录名称和子目录名称,包括没有子目录的目录。
SELECT T1.NAME, T2.NAME
FROM  PRODUCTION.PRODUCT_CATEGORY T1  
LEFT OUTER JOIN PRODUCTION.PRODUCT_SUBCATEGORY T2 ON T1.PRODUCT_CATEGORYID = T2.PRODUCT_CATEGORYID;

-- 右外连接:例 2 从 PRODUCT_CATEGORY、PRODUCT_SUBCATEGORY 中查询图书的目录名称和所有子目录名称,包括没有目录的子目录。
SELECT T1.NAME, T2.NAME
FROM PRODUCTION.PRODUCT_CATEGORY T1 
RIGHT OUTER JOIN PRODUCTION.PRODUCT_SUBCATEGORY T2 ON T1.PRODUCT_CATEGORYID = T2.PRODUCT_CATEGORYID;
【6】子查询
-- 例如,查询通常价格最小的供应商的名称和最小价格:
SELECT NAME, 
	(SELECT MIN(STANDARDPRICE) 
     FROM PRODUCTION.PRODUCT_VENDOR T1
     WHERE T1.VENDORID = T2.VENDORID
    ) as minPrice
FROM PURCHASING.VENDOR T2;
【7】分组查询
-- 例 1 统计每个部门的员工数。(方式1)
SELECT e.DEPARTMENTID, 
	d.NAME,
	COUNT(*)
FROM RESOURCES.EMPLOYEE_DEPARTMENT e
left join RESOURCES.DEPARTMENT d on e.DEPARTMENTID = d.DEPARTMENTID 
GROUP BY e.DEPARTMENTID,d.NAME ;

-- 例 2 求小说类别包含的子类别所对应的产品数量,并按子类别编号的升序排列。
SELECT A1.PRODUCT_SUBCATEGORYID AS 子分类编号
	,A3.NAME AS 子分类名
	,count(*) AS 数量
FROM
  PRODUCTION.PRODUCT A1,
  PRODUCTION.PRODUCT_CATEGORY A2,
  PRODUCTION.PRODUCT_SUBCATEGORY A3
WHERE A1.PRODUCT_SUBCATEGORYID=A3.PRODUCT_SUBCATEGORYID 
	AND  A2.PRODUCT_CATEGORYID=A3.PRODUCT_CATEGORYID
	AND  A2.NAME='小说'
GROUP  BY  A1.PRODUCT_SUBCATEGORYID,A3.NAME
ORDER  BY  A1.PRODUCT_SUBCATEGORYID;

四、解释执行计划 EXPLAIN FOR

-- 语法结构
EXPLAIN  [AS <计划名称>]  FOR <SQL语句>;
<SQL语句> ::= <删除语句> | <插入语句> | <查询语句> | <更新语句>

-- 参数
-- 1.<删除语句> 指数据删除语句;
-- 2.<插入语句> 指数据插入语句;
-- 3.<查询语句> 指查询语句;
-- 4.<更新语句> 指数据更新语句。

image.png

-- 语句功能:供用户以结果集的方式查看执行计划。
-- 举例说明:例 1 以结果集的方式显示如下语句的查询计划:
EXPLAIN FOR  SELECT NAME, SCHID FROM SYS.SYSOBJECTS WHERE SUBTYPE$='STAB';
-- 查询结果如下:
PLAN_ID|PLAN_NAME|CREATE_TIME            |LEVEL_ID|OPERATION|TAB_NAME  |IDX_NAME          |SCAN_TYPE|SCAN_RANGE|ROW_NUMS|BYTES|COST|CPU_COST|IO_COST|FILTER                      |JOIN_COND|ADVICE_INFO|PSTART|PSTOP|
-------+---------+-----------------------+--------+---------+----------+------------------+---------+----------+--------+-----+----+--------+-------+----------------------------+---------+-----------+------+-----+
     11|NULL     |2024-06-28 02:31:08.000|       0|NSET2    |NULL      |NULL              |NULL     |NULL      |      29|  100|   1|       0|      0|NULL                        |NULL     |NULL       |     0|    0|
     11|NULL     |2024-06-28 02:31:08.000|       1|PRJT2    |NULL      |NULL              |NULL     |NULL      |      29|  100|   1|       0|      0|NULL                        |NULL     |NULL       |     0|    0|
     11|NULL     |2024-06-28 02:31:08.000|       2|SLCT2    |NULL      |NULL              |NULL     |NULL      |      29|  100|   1|       0|      0|SYSOBJECTS.SUBTYPE$ = 'STAB'|NULL     |NULL       |     0|    0|
     11|NULL     |2024-06-28 02:31:08.000|       3|CSCN2    |SYSOBJECTS|SYSINDEXSYSOBJECTS|NULL     |NULL      |    1161|  100|   1|       0|      0|NULL                        |NULL     |NULL       |     0|    0|

附录

(1)问题记录1:更新 unzip 异常

[root@localhost ~]# sudo yum update unzip
CentOS Linux 8 - AppStream                                                                                                  88  B/s |  38  B     00:00
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

解决方案:

  1. 检查 CentOS 生命周期
    CentOS 8 已经在 2021 年底结束了其标准支持周期,并且官方仓库可能不再提供所有软件包或更新。你可能需要考虑迁移到 CentOS Stream 8(CentOS 的继任者)或其他支持的 Linux 发行版。

🙏至此,非常感谢阅读🙏

dameng-long.png