mysql schema和database_数据库中的Schema和Database的区别

在mysql中创建一个Schema和创建一个Database的效果好像是一样的,但是在sqlserver和orcal数据库中效果又是不同的,目前我只能理解为在mysql中schema<==>database;

fc4432a9051c377a2cc521cc57c625bf.png

数据库中的user和schema的关系:

假如我们想了解数据库中的user和schema的关系,首先必须要清楚数据库中的user和schema的概念。

在sqlserver2000中,由于架构的原因,user和schema总有一层隐含的关系,让我们很少意识到其实user和schema是两种完全不同的概念,不过在sqlserver2005中这种架构被打破了,user和schema也被分开了。

首先来做一个比喻,什么是database,schema,table,列,行,user?可以把database看作是一个大的仓库,仓库分了很多很多的房间,schema就是其中的房间,一个schema代表一个房间,table可以看作是每个schema中的床,table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归啊。然后床上可以放置很多物品,好比table可以放置很多列和行一样,数据库中存储数据的基本单元是table,现实中每个仓库放置物品的基本单位就是床,user就是每个schema的主人,(所以schema包含的object,而不是user),其实user是对应与数据库的(即user是每个对应数据库的主人),既然有操作数据库的(仓库)的权利,就肯定有操作数据库中每个schema(房间)的权利,就是说每个数据库映射的user有每个schema(房间)的钥匙,换句话说,如果它是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间,这个现实中的相似,我还可以给user分配具体的权限,也就是他到某一房间能做些什么,是只能看(read-only),还是可以像主人一样有所有的控制权(r/w),这个就要看这个user所对应的角色role了。

在sqlserver2000中,假如我们在某一数据库中创建了用户Bosco,那么此时后台也为我们默认的创建了schema【Bosco】,schema的名字和user的名字相同,这也是我们分不清用户和schema的原因。

在sqlserver2005中,为了向后兼容,当你用sp_adduser存储过程创建一个用户的时候,sqlserver2005同时也创建了一个和用户名相同的schema,然而这个存储过程是为了向后兼容才保留的,我们应该逐渐熟悉用新的DDL语言create user和create schema来操作数据库,在sqlserver2005中,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schema,dbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录用户有默认的schema,那么所做的一切操作都是在默认的schema上进行(比如当前登录用户为login1,该用户的默认schema为login1,那么所做的所以操作都是在这个login1默认schema上进行的。实验已经证明的确如此)。估计此时你会有一点晕,刚才说dbo是一个schema,但是你可以在数据库中查看到,dbo同事也是一个user,晕了吧。

在sqlserver2005中创建一个数据库的时候,会有一些schema包括进去,被包括进去的schema有:dbo,INFORMATION_SCHEMA,guest,sys等等(还有一些角色schema)。

在上文中已经提到了,在sqlserver2005中当用存储过程sp_adduser创建一个user时,同时sqlserver2005也为我们创建了一个默认的和用户名相同的schema,这个问题出来了,当我们create table a时,如果没有特定的schema做前缀,这个a表创建在了哪个schema上,即进入了哪个房间?答案是:

1.如果当前操作数据库的用户(可以用select current_user查出来)有默认的schema(在创建用的时候指定了),那么表a被创建在了默认的schema上。

2.如果当前操作数据库的用户没有默认的schema(即在创建user的时候默认为空),但是有一个和用户名同名的schema,那么表a照样被创建在了dbo schema上,即使有一个和用户名同名的schema存在,由于它不是该用户默认的schema,所以创建表的时候是不会考虑的,当作一般的schema来处理,别看名字相同,可是没有任何关系哦。

3.如果在创建表a时候指定了特定的schema做前缀,则表a被创建在了指定的schema上(有权限吗?)

现在问题又出来了,在当前操作数据库的用户(用select current_user可以查看到,再次强调)没有默认schema的前提下,当我们用create table a语句时,a表会去寻找dbo schema,并试图创建在dbo schema上,但是如果创建a表的用户只有对dbo schema的只读权限,而没有写的权限呢?这个时候a表既不是建立不成功,这个就是会提到的login,user,role和schema四者的关系,在这里,为了避免混淆和提高操作数据库的速度(在少量数据范围内,对我们肉眼来说几乎看不到差异),我们最好每次在操作数据库对象的时候都显式地指定特定的Schema最为前缀。

现在如果登录的用户为Sue,该用户有一个默认Schema也为Sue,那么如果现在有一条查询语句为Select * from mytable, 那么搜寻每个房间(Schema)的顺序是怎样的呢?顺序如下:

1. 首先搜寻sys.mytable (Sys Schema)

2. 然后搜寻Sue.mytable (Default Schema)

3. 最后搜寻 dbo.mytable (Dbo Schema)

执行的顺序大家既然清楚了,那么以后在查询数据库表中的数据时,最好指定特定的Schema前缀,这样子,数据库就不用去扫描Sys Schema了,当然可以提高查询的速度了。

另外需要提示一下的是,每个数据库在创建后,有4个Schema是必须的(删都删不掉),这4个Schema为:dbo,guest,sys和INFORMATION_SCHEMA,其余的Schema都可以删除。

posted on 2013-12-18 11:02 顺其自然EVO 阅读(321) 评论(0)  编辑  收藏 所属分类: 数据库

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL schemadatabase都是数据库的概念。 MySQL schema是指数据库的逻辑结构,包括表、视图、存储过程、函数等。它是一种组织和管理数据库对象的方式,可以将不同的对象分组存储,方便管理和维护。 MySQL database是指数据库的物理存储结构,包括数据文件、日志文件、索引文件等。它是一种数据的存储方式,可以将数据以表的形式存储在数据库,方便查询和操作。 ### 回答2: MySQLschemadatabase常常被混淆,但它们并不是相同的概念。 在MySQLdatabase可以被理解为可以包含多张表的容器,每个database可以包含多张表和其他数据库对象(例如视图、存储过程等)。一个MySQL服务器可以同时包含多个不同的database。 而schema则可以理解为对数据库对象(包括表、列、索引等)的逻辑分类和组织。在MySQL,一个database可以包含多个schema,每个schema可以包含多张表和其他对象。schema不对应任何物理存储结构,仅仅是对数据库对象的逻辑分类和组织。 可以说,一个database可以有多个schema,每个schema包含的表、索引等对象都是相互独立的。可以使用schema来将不同的表和其他对象分组,使数据库的管理更加方便。 总之,MySQLdatabaseschema虽然有些相似,但并不是相同的概念。database是对物理存储空间的划分,而schema是对数据库对象的逻辑分类和组织。在实践,根据业务需求和数据分类,可以将数据库的表、索引、列等对象分别划分到不同的databaseschema。 ### 回答3: MySQL 是一种常用的关系型数据库管理系统,用于存储数据并支持广泛的应用程序开发。本文主要介绍 MySQL 数据库schemadatabase 的概念和区别。 首先,MySQL database 可以理解为一个独立的数据存储单元,它包含了一个或多个相关表格,每个表格又包含了一些相关的记录。在 MySQL 数据库的命名遵循特定规则,并且必须唯一。通过命令行或者 GUI 工具等方式,我们可以创建、删除、重命名、备份、恢复 MySQL 数据库等操作。 而 schema 则是 MySQL 数据库的一个 概念或元数据(schema metadata),可以理解为一个数据库对象的结构描述。它用于描述数据库每个表格的结构和关系,例如表格的字段、类型、索引等信息。与数据库不同,schema 不包含实际的数据,而是定义了一些元数据,用于描述数据库对象的结构,这些对象包含但不限于表格、视图、存储程序等。此外,MySQL 支持多个 schema 同时存在于同一个数据库,并且每个 schema 之间相互独立。 虽然 databaseschemaMySQL 具有不同的概念,但它们之间是有联系的。在 MySQL ,每个数据库都包含了一个默认的 schema,且数据库schema 名称可以相同或不同,两者之间可以相互映射。可以通过以下 SQL 语法来在 MySQL 创建 databaseschema: CREATE DATABASE database_name; CREATE SCHEMA schema_name; 总之,MySQL databaseschema 都是用于存储和管理数据的概念,其 database 是一个实际存在数据和表格的独立单元,而 schema 则是描述数据结构和关系的元数据。通常,一个数据库可以包含多个 schema,每个 schema 可以包含多张表格和相关的元数据对象。了解这些概念可以更好地理解 MySQL 的使用和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值