在达梦数据库 (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
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤