DB2数据库中用户和Schema的概念

目录


1. DB2数据库中用户的概念
2. DB2中schema的概念
3. 用户与Schema的关系

1. DB2数据库中用户的概念

Oracle和MySQL数据库的用户都是数据库内部的用户,由数据库来管理。

但DB2不一样,DB2没有数据库用户的概念,它依赖于操作系统用户,也就是操作系统上有这个用户,这个用户才可能连接到DB2数据库。连接数据库的命令:

db2 connect to dbname user <username> using <password>

这里的username是一个操作系统的用户,password是指这个系统用户的密码。


2. DB2中Schema的概念

每个DB2的表的完整名子都是由两部分组成 SchemaName.Tablename,没有例外。
如果访问表的时候,不加Schema的名子,就有一个默认的Schema, 比如运行了以下的SQL语句:

db2 "create table a.t1 (id int)"
db2 "create table b.t1 (id int)"

那么就创建了两个表,schema分别是a和b,那么问题来了,如果创建表的时候不指定schema呢?
默认的Schema就是当前用户的用户名,比如当前连接用户是 db2inst1,发出如下SQL
db2 "create table t1(id int)"
那么这个表的schema就是db2inst1

当然,可以使用db2 set current schema来改变当前会话默认的Schema
db2 "set current schema c"
db2 "create table t1(id int)"
这个新建的表的完整表名就是c.t1

使用db2 list tables for all可以看到所有表,如下:
 

db2inst1@node01:~> db2 "list tables for all" | grep -iw t1
Table/View                      Schema          Type  Creation time             
------------------------------- --------------- ----- --------------------------
T1                              A               T     2019-08-23-06.53.18.807936
T1                              B               T     2019-08-23-06.53.22.671670
T1                              C               T     2019-08-23-06.53.39.154763
T1                              DB2INST1        T     2019-08-23-06.53.29.872110

可以看到有4条表 A.T1, B.T1, C.T1和DB2INST1.T1,如果现在发出命令db2 "select * from t1",那么实际访问的是C.T1,因为前面有发出过命令db2 set current schema c


3. 用户名与Schema的关系


没有必然联系,可能有用户,但没有和用户名一样的Schema。也可能有schema,但没有和Schema一样的用户名。
唯一的联系是,如果访问表的时候不指定schema,默认的Schema是当前连接用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值