在达梦数据库 (DM) v8 中,要修改表名、字段名和字段数据类型,可以使用 ALTER TABLE 语句。以下是修改表名、字段名和字段数据类型的DDL语句示例(主要是市面上不可用)

命令行 连接达梦数据库

连接达梦数据库

./disql SYSDBA/SYSDBA@localhost:5237

# 命令行输入完毕,输入账号、密码

退出命令行

CTRL + Q

执行SQL文件

dmdsqlexec -f<SQL文件路径>

备份库

dmdump -a -f<备份文件路径>

备份表

dmdump -t<表名称> -f<备份文件路径>

导入SQL脚本

进入达梦客户端终端界面

方式一:`/www/a.sql;
方式二:start /www/a.sql;

注意⚠️:在执行 SQL 的时候,难免有遇到特殊符号问题,需要额外输入

set char_code utf8;
set define off;

达梦表查询DQL

查看表结构(不推荐,不保证100%可执行)

这命令测试的时候 不是超管账号哦!

SELECT
	DBMS_METADATA.GET_DDL('TABLE',
	'你的表名')
FROM
	DUAL;

查看表结构 二

SELECT
	TABLE_NAME AS 表名称,
	COLUMN_NAME AS 字段名称,
	DATA_TYPE AS 字段类型,
	DATA_LENGTH AS 字段长度,
	DATA_DEFAULT AS 字段默认值,
    CASE NULLABLE
        WHEN 'N' THEN '否'
        WHEN 'Y' THEN '是'
        ELSE '未知'
    END AS 可为空值
	-- ,*
FROM
	ALL_TAB_COLUMNS
WHERE
	-- TABLE_NAME = '你的表名' AND
	OWNER LIKE '%EA_%'
ORDER BY 
	TABLE_NAME ASC, COLUMN_ID ASC
LIMIT 100;

查看库的全部表个数

仅仅用于查询数据表个数。无其他信息

SELECT
	TABLE_NAME AS 表名称,
	OWNER AS 表所属用户,
	*
FROM
	ALL_TABLES;

查看表名称注释

SELECT
	OWNER AS 所属账号,
	TABLE_NAME AS 表代码,
	TABLE_TYPE AS 表类型_可能有VIEW_我们只取TABLE,
	COMMENTS AS 表注释
FROM
	all_tab_comments
WHERE
	OWNER LIKE '%_TEST%'
	AND TABLE_TYPE = 'TABLE'
LIMIT 1000;

查看字段注释

SELECT
	OWNER AS 所属账号,
	TABLE_NAME AS 表代码,
	SCHEMA_NAME AS 表所属模式,
	COLUMN_NAME AS 字段名称,
	COMMENTS AS 字段注释
FROM
	all_col_comments
WHERE
	OWNER LIKE '%_TEST%'
LIMIT 1000;

更多详细表信息

修改表注释

   COMMENT ON TABLE 表名 IS '表注释';

修改表名(表代码)

   ALTER TABLE 旧表名 RENAME TO 新表名;

将上述语句中的 "旧表名" 替换为实际的旧表名,"新表名" 替换为要修改成的新表名。

例如,将表名为 "old_table" 修改为 "new_table",可以执行以下语句:

   ALTER TABLE old_table RENAME TO new_table;

修改字段默认值:为null

   ALTER TABLE 表名 MODIFY 字段名 NULL;

修改字段名

   ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名;

将上述语句中的 "表名" 替换为实际的表名,"旧字段名" 替换为要修改的旧字段名,"新字段名" 替换为要修改成的新字段名。

例如,将表名为 "my_table" 中的字段名 "old_column" 修改为 "new_column",可以执行以下语句:

   ALTER TABLE my_table RENAME COLUMN old_column TO new_column;

修改字段数据类型

说明一下,达梦 VARCHAR 不支持转 TEXT,遇到类似情况,建议重新删除字段,重新添加一个!

   ALTER TABLE 表名 MODIFY 字段名 新数据类型;

将上述语句中的 "表名" 替换为实际的表名,"字段名" 替换为要修改的字段名,"新数据类型" 替换为要修改成的新数据类型。

例如,将表名为 "my_table" 中的字段名为 "my_column" 的数据类型从 INT 修改为 VARCHAR(50),可以执行以下语句:

   ALTER TABLE my_table MODIFY my_column VARCHAR(50);

请注意,在执行这些修改DDL语句之前,务必备份数据,并确保没有其他操作正在使用该表,以避免数据丢失或冲突。

给表添加一个字段

📢:我再DBeaver操作DM数据库的时候,alter语句每条可以单独执行,但是多条放在一起就无法执行,IDEA自带的数据库可以执行!

语法

alter table 数据库名.数据表名 add 字段名称 VARCHAR(500) not null;

-- not null 可以省略
comment on column 数据库名.数据表名.字段名称 is '我是注释';

案例

alter table 数据库名.数据表名 add EMAIL VARCHAR(500) not null;

comment on column 数据库名.数据表名.EMAIL is '邮箱';

修改字段名称

语法

alter table TABLE rename column 字段A to 字段B;

案例

-- 案例:将BASE_LINE字段名称变更为BASE_LINE_2020
alter table 数据库名.数据表名 rename column BASE_LINE to BASE_LINE_2020;

修改字段注释

语法

   comment on column 数据库名.数据表名.字段名 is '新的注释';

案例

   comment on column 数据库名.数据表名.EMAIL is '邮箱的注释';

删除字段

语法

   alter table 数据库名.数据表名 drop 字段名;

案例

   alter table 数据库名.数据表名 drop EMAIL;

索引

创建索引 下文有更好

CREATE UNIQUE INDEX "索引名" ON "表名"("字段A" ASC,"字段B" ASC,"字段C" ASC,"字段D" ASC);

AA 查看表的索引情况 比较好(支持了联合索引)

SELECT
	i.TABLE_NAME,
	i.OWNER,
	i.INDEX_NAME,
	i.uniqueness,
	LISTAGG(ic.COLUMN_NAME,
	',') WITHIN GROUP (
	ORDER BY ic.COLUMN_POSITION) AS COLUMN_NAMES
FROM
	ALL_INDEXES i
JOIN ALL_IND_COLUMNS ic ON
	i.INDEX_NAME = ic.INDEX_NAME
WHERE
	i.TABLE_NAME LIKE '你的表名'
GROUP BY
	i.TABLE_NAME,
	i.OWNER,
	i.INDEX_NAME,
	i.uniqueness

AA 查看表的索引情况 比较好(可见索引字段排序方式)

SELECT
	i.TABLE_NAME,
	i.OWNER,
	i.INDEX_NAME,
	i.uniqueness,
	LISTAGG(CONCAT(ic.COLUMN_NAME, ' ', ic.DESCEND),
	',') WITHIN GROUP (
ORDER BY
	ic.COLUMN_POSITION) AS COLUMN_NAMES
FROM
	ALL_INDEXES i
JOIN ALL_IND_COLUMNS ic ON
	i.INDEX_NAME = ic.INDEX_NAME
WHERE
	i.TABLE_NAME LIKE '你的表名'
GROUP BY
	i.TABLE_NAME,
	i.OWNER,
	i.INDEX_NAME,
	i.uniqueness

查看表的索引情况 (比较纯粹,以单个字段为粒度)

SELECT
	t.TABLE_NAME AS "索引所在表名",
	c.TABLE_OWNER AS "表归属",
	i.INDEX_NAME AS "索引名称(多个索引名称一样,就是联合索引)",
	c.COLUMN_NAME AS "索引字段",
	i.INDEX_TYPE AS "索引类型",
	i.UNIQUENESS AS "是否唯一",
	c.DESCEND AS "是否升序",
	c.COLUMN_POSITION AS "索引顺序"
FROM
		all_indexes i
JOIN all_ind_columns c ON
	i.INDEX_NAME = c.INDEX_NAME
JOIN all_tables t ON
	i.TABLE_NAME = t.TABLE_NAME
WHERE
	t.TABLE_NAME LIKE '%表名称%' 
ORDER BY
	c.COLUMN_POSITION ASC
LIMIT 100

创建/修改索引

CREATE OR REPLACE UNIQUE INDEX "索引名" ON "表名"("字段A" ASC,"字段B" ASC,"字段C" ASC,"字段D" ASC);

CREATE OR REPLACE INDEX "索引名" ON "表名"("字段A" ASC,"字段B" ASC,"字段C" ASC,"字段D" ASC);

删除索引

   DROP INDEX 索引名;

索引改名

   ALTER INDEX 老索引名称 RENAME TO 新索引名称;

命令行操作

导出dmp表结构

参数参考:https://eco.dameng.com/document/dm/zh-cn/pm/dexp-logical-export.html

dexp """SYSDBA"""/"""******"""@10.88.40.143:5238 DIRECTORY=你的位置 FILE=ddl.dmp SCHEMAS=模式名 TABLESPACE=N DROP=N COL_DEFAULT_SEPARATE=N LOG=ddl.log EXCLUDE=(ROWS,GRANTS) LOG_WRITE=N
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤