Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >数据库中的schema

数据库中的schema

作者头像
全栈程序员站长
发布于 2022-08-10 01:32:09
发布于 2022-08-10 01:32:09
9710
举报

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

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

schema的官方定义为:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL的Schema是什么?
schema在数据库中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引等等。 一般一个用户对应一个集合,所以为区分不同集合就需给不同集合起名。用户的schema名就相当于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。
JavaEdge
2021/02/23
9K0
MySQL的Schema是什么?
读书笔记-APUE第三版-(8)进程控制
看来有的人还是对schema的真正含义不太理解,如今我再次整理了一下,希望对大家有所帮助。
全栈程序员站长
2021/11/15
2830
《MySQL入门很轻松》第3章:数据库的创建与操作
在 MySQL中,数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的应用程序接口(Application Program Interface,API),用于创建、访问、管理、搜索和复制所保存的数据。 不过,也可以将数据存储在文件中,但是在文件中读写数据的速度相对较慢。所以,现在使用关系数据库管理系统(Relational Database Management System,RDBMS)来存储和管理大数据量。而MySQL 是最流行的关系数据库管理系统,尤其是在Web应用方面,MySQL可以说是最好的RDBMS应用软件之一。
炒香菇的书呆子
2022/02/14
1.4K0
《MySQL入门很轻松》第3章:数据库的创建与操作
数据库中的Schema是什么?「建议收藏」
参考:http://database.guide/what-is-a-database-schema/
全栈程序员站长
2022/08/27
15K0
数据库中的Schema是什么?「建议收藏」
深入学习MySQL 03 Schema与数据类型优化
schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。
KEN DO EVERTHING
2019/07/31
5770
Oracle-数据泵expdp/impdp实操
因数据库版本为11.2(大于Oracle10g)初步确定使用数据泵的方式从198导出后导入197数据库
小小工匠
2021/08/16
1.2K0
NodeJS中使用mssql模块连接SQLServer数据库
最近看了下NodeJS下连接SQLServer的一些示例,发现NodeJs中有两个模块,一个是mssql,其npm地址是:https://www.npmjs.com/package/mssql;另外一个是:tedious,其npm地址是:https://www.npmjs.com/package/tedious,github对应的地址是:https://github.com/tediousjs/tedious
ccf19881030
2020/03/09
12.2K0
NodeJS中使用mssql模块连接SQLServer数据库
oracle之表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
数据文件和日志文件是数据库中最关键的文件。它们是数据存储的地方。每一个数据库至少有一个与之相关的数据文件,通常情况下不仅仅一个,有非常多。数据在数据文件里是怎样组织的?要了解这些内容我们首先必须理解什么是表空间(tablespace)、段(segment)、区(extent)、块(block),这些都是oracle数据库在数据文件里组织数据的基本单元。如今我们来理解这些概念。 块是数据存储的物理单位,也是数据文件里最基础的单位,数据直接存储在块上。是oracle空间分配的最小单位。oracle中的块大小常见的有三种,2KB、4KB、8KB。块的大小在数据库创建时就已经固定下来,数据库中每一个块的大小都是同样的,并且全部的块都有同样的格式,由“块头+表文件夹+行文件夹+空暇空间+数据空间”组成。块头包括着块类型(比方是表块、还是索引块)的信息、磁盘上块的位置等信息。表文件夹(table directory),假设有的话,包括着此块中存储各行的表的信息(假设一个块中存有多个表中的数据)。行文件夹(row directory)包括着数据行的描写叙述信息,它是一个指针数组,指示了每一行在数据块中的物理位置。块头、表文件夹、行文件夹统称为块开销(block overhead),是oracle原来统计、管理块本身的。剩下的两部分非常easy,已经存有数据的就是数据空间,临时没存的就是空暇空间。 区又叫盘区,是数据文件里一个连续的分配空间,它比块要大,由块组成。有些对象分配空间时可能至少须要两个盘区,比方回滚段,而这两个盘区不一定要求相连。区的大小从一个块到2GB不等 段是oracle数据库中的分配单位,对象如表、索引等都是以段为单位进行分配。当创建一个表时将创建一个表段,创建一个索引时就创建一个索引段。每个消耗存储空间的对象终于被存储到一个单一的段中。有回滚段、暂时段、聚簇段、索引段等。 表空间是一个逻辑容器,它和数据文件关联起来,一个表空间至少有一个数据文件与之关联。一个表空间能够有多个段,一个段仅仅能属于一个表空间。 方案(schema)又叫模式,是比表空间小一级的逻辑概念,它也是一个逻辑容器。多个用户可能共用一个表空间,那怎样区分开每个用户?那么在表空间中对每个用户都有一个相应的方案,用于保存单个用户的信息。 oracle中存储的层次结构总结例如以下: 一、数据库由一个或多个表空间组成 二、表空间由一个或多个数据文件组成,一个表空间包括多个段 三、段由一个或多个区组成 四、区是数据文件里一个连续的分配空间,由一个或多个块组成 五、块是数据库中最小、最主要的单位,是数据库使用的最小的I/O单元 六、每一个用户都有一个相应的方案
全栈程序员站长
2022/07/09
3.1K0
SqlServer下数据库链接的使用方法
 有时候我们希望在一个sqlserver下访问另一个sqlserver数据库上的数据,或者访问其他oracle数据库上的数据,要想完成这些操作,我们首要的是创建数据库链接。
深蓝studyzy
2022/06/15
7270
快速搞懂19c 数据库安全新特性 (一)Schema Only Accounts
关键字(Keyword):19c 数据库安全 新特性 Schema Only Accounts
SQLplusDB
2020/04/08
1.4K0
快速搞懂19c 数据库安全新特性 (一)Schema Only Accounts
干货 | MSSQL注入和漏洞利用姿势总结
Microsoft SQL Server 是微软开发的关系型数据库管理系统。作为数据库服务器,它是一种软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据,这些应用程序可以在同一台计算机上运行,也可以在网络(包括 Internet)上的另一台计算机上运行。SQL Server 默认开放的端口是 TCP 1433。
HACK学习
2023/01/03
7K0
干货 | MSSQL注入和漏洞利用姿势总结
MSSQL系列之十六 架构(Schema)
MSSQL 2005中架构都是涉及到用户、角色、表,因此,要理解架构,需要理清和这些概念的联系。
张哥编程
2024/12/13
720
【数据库】操作命令
7、说明:添加主键: sqlAlter table tabname add primary key(col) 说明:删除主键: sqlAlter table tabname drop primary key(col) 8、说明:创建索引: sqlcreate [unique] index idxname on tabname(col….) 删除索引: sqldrop index idxname 注:索引是不可更改的,想更改必须删除重新建。
Raymond_Lee
2022/11/16
1.3K0
NodeJS中使用mssql和tedious模块连接SQLServer数据库
最近看了下NodeJS下连接SQLServer的一些示例,发现NodeJs中有两个模块,一个是mssql,其npm地址是:https://www.npmjs.com/package/mssql;另外一个是:tedious,其npm地址是:https://www.npmjs.com/package/tedious,github对应的地址是:https://github.com/tediousjs/tedious
ccf19881030
2022/12/01
3.9K0
NodeJS中使用mssql和tedious模块连接SQLServer数据库
Oracle Schema
1、这是Schema的definition: A schema is a collection of database objects (used by a user.)  Schema objects are the logical structures that directly refer to the database’s data. A user is a name defined in the database that can connect to and access objects. Sc
郑小超.
2018/01/26
8730
SQL SERVER 2005/2008 中关于架构的理解(一)
在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询,提示“对象名'CustomEntry' 无效。”。当带上了架构名称之后(如“cus.CustomEntry”),却又能查询到表中的数据了,但是查询语句是已经写死在了应用程序中的,如果要进行更改,就有很大的工作量, 这是一件很郁闷的事情。于是想从数据库层面上解决此问题,在查询了大量的资料之后,对于SQL SERVER中的架构有所了解,并解决以上问题。
ellipse
2019/08/16
1.3K0
SQL SERVER 2005/2008 中关于架构的理解(一)
创建sqlserver数据库脚本 范例
下面是创建一个sqlserver数据库的代码模板,加上一个创建表的模板。开发的时候可以拷贝过去直接改动一下就可以用了。
老马
2022/05/10
9390
数据库查询优化
1 使用SET NOCOUNT ON 选项: 缺省地,每次执行SQL语句时,一个消息会从服务端发给客户端以显示SQL语句影响的行数。这些信息对客户端来说很少有用。通过关闭这个缺省值,你能减少在服务端和客户端的网络流量,帮助全面提升服务器和应用程序的性能。为了关闭存储过程级的这个特点,在每个存储过程的开头包含“SET NOCOUNT ON”语句。 2 正确使用UNION和UNION ALL: 许多人没完全理解UNION和UNION SELECT是怎样工作的,因此,结果浪费了大量不必要的SQLServer资源。当使用UNION时,它相当于在结果集上执行SELECT DISTINCT。换句话说,UNION将联合两个相类似的记录集,然后搜索重复的记录并排除。如果这是你的目的,那么使用UNION是正确的。但如果你使用UNION联合的两个记录集没有重复记录,那么使用UNION会浪费资源,因为它要寻找重复记录,即使你确定它们不存在。 所以如果你知道你要联合的记录集里没有重复,那么你要使用UNION ALL,而不是UNION。UNION ALL联合记录集,但不搜索重复记录,这样减少SQLServer资源的使用,从而提升性能。 3 尽量不用SELECT * : 绝大多数情况下,不要用 * 来代替查询返回的字段列表,用 * 的好处是代码量少、就算是表结构或视图的列发生变化,编写的查询SQL语句也不用变,都返回所有的字段。但数据库服务器在解析时,如果碰到 *,则会先分析表的结构,然后把表的所有字段名再罗列出来。这就增加了分析的时间。 4 慎用SELECT DISTINCT: DISTINCT子句仅在特定功能的时候使用,即从记录集中排除重复记录的时候。这是因为DISTINCT子句先获取结果集然后去重,这样增加SQLServer有用资源的使用。当然,如果你需要去做,那就只有去做了。 当如果你知道SELECT语句将从不返回重复记录,那么使用DISTINCT语句对SQLServer资源不必要的浪费。 5 少用游标: 任何一种游标都会降低SQLServer性能。有些情况不能避免,大多数情况可以避免。所以如果你的应用程序目前正在使用TSQL游标,看看这些代码是否能够重写以避免它们。如果你需要一行一行的执行操作,考虑下边这些选项中的一个或多个来代替游标的使用: 使用临时表 使用WHILE循环 使用派生表 使用相关子查询 使用CASE语句 使用多个查询 上面每一个都能取代游标并且执行更快。 如果你不能避免使用游标,至少试着提高它们的速度,找出加速游标的方法。 6 选择最有效率的表名顺序: SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理,在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表,当SQLSERVER处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序;然后扫描第二个表(FROM子句中最后第二个表);最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。 例如: 表 TAB1有 16384 条记录,表 TAB2 有5条记录,选择TAB2作为基础表 (最好的方法): select count(*) from TAB1 a, TAB2 b 选择TAB1作为基础表 (不佳的方法): select count(*) from TAB2 a, TAB1 b 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。 7 使用表的别名(Alias): 当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上,这样可以减少解析的时间并减少那些由Column歧义引起的语法错误。 8 SARG你的WHERE条件: ARGE来源于"Search Argument"(搜索参数)的首字母拼成的"SARG",它是指WHERE子句里,列和常量的比较。如果WHERE子句是sargable(可SARG的),这意味着它能利用索引加速查询的完成。如果WHERE子句不是可SARG的,这意味着WHERE子句不能利用索引(或至少部分不能利用),执行的是全表或索引扫描,这会引起查询的性能下降。 在WHERE子句里不可SARG的搜索条件如"IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE"和"LIKE '%500'",通常(但不总是)会阻止查询优
哲洛不闹
2018/09/19
4.4K0
常用数据库 SQL 命令详解(下)
本文主要以 Mysql 数据库为基础,对常用 SQL 语句进行一次深度总结,由于篇幅较长,难免会有些遗漏的地方,欢迎网友留言指出!
Java极客技术
2022/12/04
9790
探索SQL Server元数据(一)
  在数据库中,我们除了存储数据外,还存储了大量的元数据。它们主要的作用就是描述数据库怎么建立、配置、以及各种对象的属性等。本篇简单介绍如何使用和查询元数据,如何更有效的管理SQLServer 数据库。
用户1217611
2018/08/03
9330
探索SQL Server元数据(一)
相关推荐
MySQL的Schema是什么?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档