数据库中的schema

数据库中的schema数据库中的schema

大家好,又见面了,我是你们的朋友全栈君。

         研究多租户的过程中涉及到了schema的概念,具体是什么呢?

schema的官方定义为:

schema is a collection of database objects (used by auser.). 
Schema objects are the logical structures thatdirectly refer to the databases data.
user is a name defined in the databasethat can connect to and access objects.
Schemas and users help database administratorsmanage database security.

       从定义我们可以看出:schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。
       
如果把database看作是一个仓库,仓库很多房间(schema),一个schema代表一个房间,table可以看作是每个房间中的储物柜,user是每个schema的主人,有操作数据库中每个房间的权利,就是说每个数据库映射的user有每个schema(房间)的钥匙。

       默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。访问一个表时,如果没有指明该表属于哪个schema,系统会自动加上缺省的schema。一个对象的完整名称为schema.object,而不属user.object

       MySQL中创建一个Schema和创建一个Database的效果好像是一样的,但是在sqlserverorcal数据库中效果又是不同的。
       
SQL Server 2000中,userschema总有一层隐含的关系,让我们很少意识到其实userschema是两种完全不同的概念,假如我们在某一数据库中创建了用户Bosco,那么此时后台也为我们默认的创建了schemaBosco】,schema的名字和user的名字相同。
       
SQL Server 2005中,为了向后兼容,当用sp_adduser存储过程创建一个用户的时候,sqlserver2005同时也创建了一个和用户名相同的schema,然而这个存储过程是为了向后兼容才保留的,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schemadbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录用户有默认的schema,那么所做的一切操作都是在默认的schema上进行。
       
Oracle数据库中不能新建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。

 

              摘自《数据库中Schema(模式)概念的理解》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105690.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux命令之pstack[通俗易懂]

    linux命令之pstack[通俗易懂]很多时候我们想知道在Linux下后台程序到底运行到哪里了,卡住了吗,出错了吗,最简单的我们会使用#psauxf|grep来查看后台程序的状态,可是如果想知道的更多,那就可以用到pstack这个命令了。首先举一个简单的例子(test.c)来引出这个命令 #include#include#includevoid*thread_proc(void*data)

    2025年11月18日
    4
  • 误删数据?如何快速恢复Oracle数据库[通俗易懂]

    误删数据?如何快速恢复Oracle数据库[通俗易懂]误删oracle数据库中的数据,在不考虑全库备份和利用归档日志情况,怎样快速恢复数据呢?下面介绍3种方法。1.利用oracle提供的闪回方法进行数据恢复,适用于delete删除方式首先获取删除数据的时间点:select*fromv$sqlwheresql_textlike’%table_name%’;1根据结果中的sql_text内容,找到delete执行语句对应的删除时间点,执行下面语句查询出删除的数据。select*fromtable_nameasoftim

    2025年12月1日
    4
  • Hook技术【移动端&&PC端详解】「建议收藏」

    Hook技术【移动端&&PC端详解】「建议收藏」最近面试说到了这个hook技术,其实就是钩子函数,但是具体如何应用需要一探究竟,私下总结一下。文章目录移动端的hook技术应用1.whatisHook技术(移动端)2.Hook技术实现的步骤3.在移动开发中的应用:3.1使用hook技术实现免注册式跳转Windows端应用1.whatishook(钩子)2.Hook分类3.Hook工作原理Hook简介微软的MSDN中,…

    2022年5月26日
    55
  • oracle的rownumber机制[通俗易懂]

    oracle的rownumber机制[通俗易懂]rownumber伪列(动态计算):rownumber必须从1开始计算,必须外面嵌套一层才可以,rownum是查询时候动态生成的从1开时候,所以whererownumber=2返回空,rownumber=1可以查到,rownumber>=1可以查到,rownumber

    2022年6月12日
    46
  • mybatis-plus mapper-locations(grbl源码分析)

    BaseMapper接口继承该接口后,无需编写mapper.xml文件,即可获得CRUD功能publicinterfaceBaseMapper<T>{/***<p>*插入一条记录*</p>**@paramentity实体对象*/intinsert(Tentity);/***<p>*根据ID删除

    2022年4月17日
    153
  • vrrp协议的作用是实现什么的备份_vrrp优先级越大越优先吗

    vrrp协议的作用是实现什么的备份_vrrp优先级越大越优先吗一、VRRP的工作原理。二、VRRP的基本配置。三、VRRP的典型组网模型及并掌握配置方法。四、VRRP的常见问题及解决办法。一、VRRP的工作原理VRRP概述VirtualRouterRedundancyProtocol,也即虚拟路由器冗余协议。利用VRRP,一组路由器协同工作,但只有一个处于Master状态,处于该状态的路由器承担实际的数据流量转发任务。在一个VRRP组内的多个路由器接口共用一个虚拟IP地址,该地址被作为局域网内所有主机的缺省网关地址。VRRP决定哪个路由器是Ma

    2025年5月23日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号