注册
达梦Manger建表分析
培训园地/ 文章详情 /

达梦Manger建表分析

龙女Moné 2023/03/16 2093 0 0

1.报告概述

本篇文档对达梦数据库创建表一个“bug”做出相应解释及其分析。

2.测试过程

2.1.打开达梦Manager工具

在达梦tool目录下打开达梦Manger工具

[dmdba@EnmoDM ~]$ cd /opt/dm8/tool
[dmdba@EnmoDM tool]$ ./manager

image.png

2.2.用达梦Manager工具创建表

2.2.1.Manager创建小写表名的表

首先创建ENMOTEST1用户下,一张表名为test1的表,表名记得是小写的test1噢!

image.png
之后去数据库里查询这张表

SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where OWNER='ENMOTEST1' and TABLE_NAME='test1';

LINEID     OWNER     TABLE_NAME TABLESPACE_NAME STATUS
---------- --------- ---------- --------------- ------
1          ENMOTEST1 test1      TBSPROD         VALID

哎,表名真的是小写的!但这还没完,DESC一下这张表试试看呢?

SQL> desc ENMOTEST1.test1
[-20001]:INVALID OBJECT NAME
-20001: OBJ_IS_EXISTS line 201 
-20001: SHOW_PARA_INFO line 302 .
used time: 0.863(ms). Execute id is 0.

…难道,DESC表 表名要大写吗?
再试试看,

SQL> DESC ENMOTEST1.TEST1;
[-20001]:INVALID OBJECT NAME
-20001: OBJ_IS_EXISTS line 201 
-20001: SHOW_PARA_INFO line 302 .
used time: 0.563(ms). Execute id is 0.

咋还是报错,这是怎么一回事?
不知道的话,我们继续往下测试看看呢

2.2.2.Manager创建大写表名的表

同上步骤,创建一张表名大写的表TEST2。

image.png
之后再去数据库里查询这张表

SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where OWNER='ENMOTEST1' and TABLE_NAME='TEST2';

LINEID     OWNER     TABLE_NAME TABLESPACE_NAME STATUS
---------- --------- ---------- --------------- ------
1          ENMOTEST1 TEST2      TBSPROD         VALID

我们DESC一下这张表看看,

SQL> DESC ENMOTEST1.TEST2

LINEID     NAME TYPE$       NULLABLE
---------- ---- ----------- --------
1          NAME CHAR(20)    Y
2          ID   VARCHAR(20) Y

used time: 0.994(ms). Execute id is 1622.

这就正常了!接下来我们到数据库里用DDL语句建表试试看是否跟用达梦Manager工具情况相同呢?

2.2.3.DDL语句创建小写表名的表

进入数据库,

SQL> create table ENMOTEST1.test5 (name char(20),id char(20),status char(20));
executed successfully
used time: 2.534(ms). Execute id is 1612.

SQL> desc ENMOTEST1.TEST5

LINEID     NAME   TYPE$    NULLABLE
---------- ------ -------- --------
1          NAME   CHAR(20) Y
2          ID     CHAR(20) Y
3          STATUS CHAR(20) Y

SQL> desc ENMOTEST1.test5

LINEID     NAME   TYPE$    NULLABLE
---------- ------ -------- --------
1          NAME   CHAR(20) Y
2          ID     CHAR(20) Y
3          STATUS CHAR(20) Y

哎,在数据库中用DDL语句创建的表名是小写的表,desc 大写表名,还是desc小写表名都是可以找到的。那我们查看一下dba_tables呢。

SQL>  select OWNER,TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where OWNER='ENMOTEST1';

LINEID     OWNER     TABLE_NAME TABLESPACE_NAME STATUS
---------- --------- ---------- --------------- ------
1          ENMOTEST1 test1      TBSPROD         VALID
2          ENMOTEST1 TEST2      TBSPROD         VALID
3          ENMOTEST1 TEST5      TBSPROD         VALID

发现呀,这张表就是一个大写表名的表,跟用达梦MANAGER创建的小写表名的表的TABLE_NAME字段显示的不同噢!

2.3.建表情况汇总

Manger工具 DDL语句
小写表名 不可行! 可行
大写表名 可行 可行

这里的不可行,是否真的不可行呢?让我们看看达梦Manger工具建表DDL语句。看看这个可视化管理工具到底是如何创建的表。
image.png
朋友们发现问题了吗?达梦Manager可视化建表DDL语句是默认带 " " 的,让我们回数据库看看是否是这个问题。

  SQL> SELECT * FROM ENMOTEST1."test1";

LINEID     NAME       HEIGHT     WEIGHT    
---------- ---------- ---------- ----------
1          邓梓龙     175cm      65kg      
2          黄美斌     170cm      60kg   

哎,问题解决。

3.结论

大家在使用达梦Manager可视化工具的时候一定要记得查看一下DDL语句,能帮你避开很多坑,比如这次我遇到的这个坑。如果我先看了DDL语句,我就知道噢,要加 " " 。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服