注册
达梦数据库,写 SQL 如何才能不带上模式名?
专栏/龙山溪笔谈/ 文章详情 /

达梦数据库,写 SQL 如何才能不带上模式名?

myth8860 2020/11/26 5365 13 7
摘要 由于达梦数据库的体系架构(单库多实例)和 MySQL 的体系架构(单实例多库)不同,导致有些情况下,在达梦数据库中写 SQL 语句时需要加上模式名(数据库名)。本文详细介绍了达梦数据库中写 SQL 语句时不加模式名的原理和方法。

经常有朋友问到在 DM 数据库里面,为何 SQL 要加上模式名(数据库名)访问呢?

4.1.png

其实这是把 MySQL 或者 SQLSERVER 的思维代入DM数据库造成的, MySQL 的体系架构是单实例多库的,一个用户可以访问多个数据库,然后指定当前数据库写 SQL 的时候就不用带上数据库名了。

达梦的体系架构是单库多实例的,也就是没有多个数据库的概念了,从 MySQL 或者 SQLSERVER 转到达梦,就需要建多个用户+表空间来对应 MySQL 的多个数据库。

例如 MySQL 中有 TESTDB1,TESTDB2 两个库,都用 root 用户来访问,在达梦中第一步就创建两个表空间:

CREATE TABLESPACE TESTDB1 DATAFILE 'TESTDB1.DBF' SIZE 128; CREATE TABLESPACE TESTDB2 DATAFILE 'TESTDB2.DBF' SIZE 128;

第二步创建两个用户,授予对应的权限:

--以下SQL用SYSDBA用户登录执行 CREATE USER TESTDB1 IDENTIFIED BY "123456789" DEFAULT TABLESPACE TESTDB1; CREATE USER TESTDB2 IDENTIFIED BY "123456789" DEFAULT TABLESPACE TESTDB2; GRANT RESOURCE TO TESTDB1; GRANT RESOURCE TO TESTDB2;

4.2.png

第三步:

迁移 MySQL TESTDB1 数据库里面的表,数据库迁移工具就使用 TESTDB1 用户来迁移。

迁移 MySQL TESTDB2 数据库里面的表,数据库迁移工具就使用 TESTDB2 用户来迁移。

第四步:访问 TESTDB1 用户(模式)下的表,就使用 TESTDB1 用户登录来访问,就不需要加模式名 TESTDB1。

4.3.jpeg

如果要用 JDBC 来访问数据库,设置如下:

jdbc.driver=dm.jdbc.driver.DmDriver jdbc.url=jdbc:dm://127.0.0.1:5236 jdbc.username=TESTDB1 jdbc.password=123456789

补充说明一下:假设一个用户拥有多个模式,该用户访问自己所属的其他非同名模式下的对象时,如何才能不带模式名呢?

这里以 SYSDBA 用户为例:

CREATE SCHEMA "TEST" AUTHORIZATION "SYSDBA"; CREATE TABLE TEST.TTTT(C1 INT); INSERT INTO TEST.TTTT VALUES(1); COMMIT; SELECT * FROM TTTT; --会报错 SET SCHEMA TEST; --切换当前模式为 TEST SELECT * FROM TTTT; --执行成功
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服