在 DM 数据库里面,为何 SQL 要加上模式名(数据库名)访问?
其实这是把 MySQL 或者 SQL Server 的思维代入 DM 数据库造成的,MySQL 的体系架构是单实例多库的,一个用户可以访问多个数据库,然后指定当前数据库写 SQL 的时候就不用带上数据库名了。
达梦的体系架构是单库多实例的,也就是没有多个数据库的概念了,从 MySQL 或者 SQL Server 转到达梦,就需要建多个用户+表空间来对应 MySQL 的多个数据库。
例如 MYSQL 中有 TESTDB1,TESTDB2 两个库,都用 root 用户来访问,在达梦中第一步就创建两个表空间:
CREATE TABLESPACE TESTDB1 DATAFILE 'TESTDB1.DBF' SIZE 128; |
- 创建两个用户,授予对应的权限
--以下 SQL 用 SYSDBA 用户登录执行 |
第三步:迁移 MySQL TESTDB1 数据库里面的表,数据库迁移工具就使用 TESTDB1 用户来迁移
迁移 MySQL TESTDB2 数据库里面的表,数据库迁移工具就使用 TESTDB2 用户来迁移
第四步:访问 TESTDB1 用户(模式)下的表,就使用 TESTDB1 用户登录来访问,就不需要加模式名 TESTDB1
如果要用 JDBC 来访问数据库,设置如下:
jdbc.driver=dm.jdbc.driver.DmDriver |
补充说明一下:假设一个用户拥有多个模式,该用户访问自己所属的其他非同名模式下的对象时,如何才能不带模式名呢?
这里以 SYSDBA 用户为例:
CREATE SCHEMA "TEST" AUTHORIZATION "SYSDBA"; |