schema 数据库?mysql数据库schema是什么
大家好,schema 数据库相信很多的网友都不是很明白,包括mysql数据库schema是什么也是一样,不过没有关系,接下来就来为大家分享关于schema 数据库和mysql数据库schema是什么的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
mysql数据库schema是什么
schema在数据库中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引等等。
一般情况下一个用户对应一个集合,为了区分不同的集合就需要给不同的集合起名字。用户的schema名就相当于用户名,并作为该用户缺省schema。
所以说,schema集合看上去像用户名。例如,当访问一个数据表时,如果该表没有指明属于哪个schema,系统就会自动的加上缺省的schema。
扩展资料
Schema的创建在不同的数据库中要创建的Schema方法是不一样的,但是它们有一个共同的特点就是都支持CREATE SCHEMA语句。
在MySQL数据库中,可以通过CREATE SCHEMA语句来创建一个数据库Oracle Database在Oracle中,由于数据库用户已经创建了一个模式,所以,CREATE SCHEMA语句创建的是一个schema,它允许将schema同表和视图关联起来,并在这些多个事务中发出多个SQL语句。
SQL Server在SQL Server中,CREATE SCHEMA会按照名称来创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。和Oracle数据库也有不同,它实际上创建了一个模式,而且一旦创建了模式,就可以往模式中添加用户和对象。
数据库中Schema和Database有什么区别
在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQL Server和Orcal数据库中好像又不一样.目前我只能理解,在mysql中 schema<==>database。
数据库中User和Schema的关系
假如我们想了解数据库中的User和Schema究竟是什么关系,首先必须了解一下数据库中User和Schema到底是什么概念。
在SQL Server2000中,由于架构的原因,User和Schema总有一层隐含的关系,让我们很少意识到其实User和Schema是两种完全不同的概念,不过在SQL Server2005中这种架构被打破了,User和Schema也被分开了。
首先我来做一个比喻,什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User?我们可以可以把
Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个
Schema中的床,Table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了J。,然后床上可以放置很多物品,就好比
Table上可以放置很多列和行一样,数据库中存储数据的基本单元是Table,现实中每个仓库放置物品的基本单位就是床,
User就是每个Schema的主人,(所以Schema包含的是Object,而不是User),其实User是对应与数据库的(即User是每个对应
数据库的主人),既然有操作数据库(仓库)的权利,就肯定有操作数据库中每个Schema(房间)的权利,就是说每个数据库映射的User有每个
Schema(房间)的钥匙,换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的操作权,可以
扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间,呵呵,和现实也太相似了吧。我还可以给User分配具体的权限,也就是他到某一个房间
能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了,至于分配权
限的问题,我留在以后单独的blog中详述。比喻到这里,相信大家都清楚了吧。
在SQL Server2000中,假如我们在某一个数据库中创建了用户Bosco,按么此时后台也为我们默认地创建了默认Schema【Bosco】。Schema的名字和User的名字相同,这也是我们分不清楚用户和Schema的原因。
在SQL Server2005中,为了向后兼容,当你用sp_adduser存储过程创建一个用户的时候,SQL
Server2005同时也创建了一个和用户名相同的Schema,然而这个存储过程是为了向后兼容才保留的,我们应该逐渐熟悉用新的DDL语言
Create User和Create Schema来操作数据库。在SQL Server2005中,当我们用Create
User创建数据库用户时,我们可以为该用户指定一个已经存在的Schema作为默认Schema,如果我们不指定,则该用户所默认的Schema即为
dbo Schema,dbo
房间(Schema)好比一个大的公共房间,在当前登录用户没有默认Schema的前提下,如果你在大仓库中进行一些操作,比如Create
Tabe,如果没有指定特定的房间(Schema),那么你的物品就只好放进公共的dbo房间(Schema)了。但是如果当前登录用户有默认的
Schema,那么所做的一切操作都是在默认Schema上进行(比如当前登录用户为login1,该用户的默认Schema为login1,那么所做的
所有操作都是在这个login1默认Schema上进行的。实验已经证明的确如此)。估计此时你会有一点晕,为什么呢?我刚才说dbo是一个
Schema,但是你可以在数据库中查看到,dbo同时也是一个user,晕了吧,呵呵。
在SQL Server2005中创建一个数据库的时候,会有一些Schema包括进去,被包括进去的Schema有:dbo,INFORMATION_SCHEMA, guest,sys等等(还有一些角色Schema,不提了,有晕了)。
我在上文中已经提到了,在SQL Server2005中当用存储过程sp_adduser创建一个user时,同时SQL
Server2005也为我们创建了一个默认的和用户名相同的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都可以删除。
数据库中的Schema到底是什么
MySQL官方文档指出,从概念上讲,模式是一组相互关联的数据库对象,如表,表列,列的数据类型,索引,外键等等。但是从物理层面上来说,模式与数据库是同义的。你可以在MySQL的SQL语法中用关键字SCHEMA替代DATABASE,例如使用CREATE SCHEMA来代替CREATE DATABASE。
参考:MySQL Glossary, MySQL 5.7参考手册. MySQL, Retrieved 6 June 2016。
SQL Server
The names of tables, fields, data types, and primary and foreign keys of a database.
SQL Server官方文档指出,schema中包含了数据库的表,字段,数据类型以及主键和外键的名称。参考:SQL Server Glossary. SQL Server 2016 Technical Documentation. Microsoft Developer Network. Retrieved 6 June 2016.
Oracle Database
Oracle中的schema系统与其他数据库系统大不相同,Oracle的schema与数据库用户密切相关。
A schema is a collection of logical structures of data, or schema objects. A schema is owned by a database user and has the same name as that user. Each user owns a single schema.
Oracle官方文档指出,schema是数据或模式对象的逻辑结构的集合,由数据库用户拥有,并且与该用户具有相同的名称,也就是说每个用户拥有一个独立的schema。
参考:Oracle Database Objects. Oracle Database Online Documentation 12c Release 1(12.1). Oracle Help Center. Retrieved 6 June 2016.
如果想了解更多关于schema的内容,可以参考这篇文章schema definitions by DBMS.
创建Schema
尽管上述三个DBMS在定义schema方面有所不同,还是有一个共同点,就是每一个都支持CREATE SCHEMA语句。
MySQL
在MySQL中,CREATE SCHEMA创建了一个数据库,这是因为CREATE SCHEMA是CREATE DATABASE的同义词。换句话说,你可以使用CREATE SCHEMA或者CREATE DATABASE来创建一个数据库。
Oracle Database
在Oracle中,CREATE SCHEMA语句实际上并不创建一个模式,这是因为已经为在创建用户时,数据库用户就已经创建了一个模式,也就是说在ORACLE中CREATE USER就创建了一个schema,CREATE SCHEMA语句允许你将schema同表和视图关联起来,并在这些对象上授权,从而不必在多个事务中发出多个SQL语句。
SQL Server
在SQL Server中,CREATE SCHEMA将按照名称创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。和ORACLE也不同,CREATE SCHEMA语句实际创建了一个模式(前面说到这个语句在ORACLE中不创建一个模式),在SQL Server中,一旦创建了模式,就可以往模式中添加用户和对象。
schema这个词可以用在很多不同的环境中,在特定数据库管理系统创建一个schema时,您需要使用DBMS特定定义模式,当你切换到一个新的数据库管理系统时,一定要查看该系统是如何定义schema的。
数据库中的Schema到底是什么
标签:还需product信息developersyntaxtednbspposfonts
好了,文章到这里就结束啦,如果本次分享的schema 数据库和mysql数据库schema是什么问题对您有所帮助,还望关注下本站哦!