在达梦数据库中,创建用户后,会自动创建与用户同名的模式,一个用户可以有多个模式,一般默认模式为与用户同名的模式,模式是所有对象的集合(表、视图、索引、序列、同义词、自增列)。

区别于MySQL和SqlServer,MySQL和SqlServer是单实例多数据库,一个用户可以访问多个数据库(一般只需要设置用户所在数据库后,就可以任意写SQL,无需带上数据库名)。
而达梦是单数据库多实例的架构,就是没有多个数据库的概念。在达梦数据库实例中一个用户对应一个默认的模式(创建用户会自动创建与用户名同名的模式),一个用户可以有多个模式。我们可以将达梦数据库中模式与MySQL或者SqlServer中的多数据库类比。当数据库用户登录后,默认它只能访问默认模式的数据库对象,如果需要访问该用户的其他模式,则需要在对象前加模式名的前缀才可以访问,就好比在mysql中用户需要切换数据库来访问其他数据库中的对象。当然,在达梦数据库中如果想在访问用户其他对象时不加模式名的前缀,可以通过以下命令设置当前用户的默认模式,当然它只是会话级的参数。
SET SCHEMA <模式名>
--如:
SET SCHEMA SYSDBA_1;
在理解模式的概念后,一些问题我们就知道具体原因了:
1、我们在创建模式的时候可能会报会报“-2103: 无效的模式名[OA]”的错误,大概率原因是该模式名已经存在导致的;
2、在查询对象时可能会报错:“-2106: 无效的表或视图名[TEST2]”,但是这个对象明明存在,那很有可能是因为这个对象是在非默认模式中,需要在对象名前加模式名,比如select * from [模式名].[表名]的方式去访问。
原创文章,作者:lzb,如若转载,请注明出处:https://www.wlkjzx.com/2023/07/27/%e8%be%be%e6%a2%a6%e6%95%b0%e6%8d%ae%e5%ba%93%e7%94%a8%e6%88%b7%e5%92%8c%e6%a8%a1%e5%bc%8f%e6%a6%82%e5%bf%b5%e8%a7%a3%e6%9e%90/
评论列表(2条)
[…] 一般可能情况为当前用户模式不正确,需要指定对象所在的模式为当前默认模式,或者对象名前增加模式名前缀,不理解的参考达梦数据库用户和模式概念解析,其他情况列举如下。 […]
[…] DM数据库运维 […]