首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用不同数据库的数据库和模式之间的差异?

问使用不同数据库的数据库和模式之间的差异?
EN

Stack Overflow用户
提问于 2009-12-09 04:10:25
回答 4查看 47.6K关注 0票数 43

MySQL和MySQL在数据库术语上有什么不同?

一个MySQL实例可以有多个数据库吗?它似乎只能创建不同的模式。但是,SQL命令是create database。

在MS SQL中,您可以创建多个数据库…每个都有一个默认模式dbo?…。但是,数据库中的多个模式仍然是可能的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-15 05:16:52

从这个link中,我们可以看到MS SQL schema不再与用户绑定,下面是相关的引述:

SQL Server2005中更改的架构行为。模式不再等同于数据库用户;现在,每个模式都是一个独立于创建它的数据库用户而存在的不同名称空间。换句话说,模式就是对象的容器。模式可以由任何用户拥有,并且其所有权是可转让的。

在MySQL中,数据库和模式完全是一回事,您甚至可以在命令中互换单词,即CREATE DATABASE具有同义词CREATE SCHEMA。

MySQL支持多个数据库(模式),MS SQL支持多个数据库和多个模式。

票数 70
EN

Stack Overflow用户

发布于 2009-12-16 07:25:24

总的来说,我发现下面这篇文章on Wikipedia很有用。

这篇文章的底部是:

SQL规范清楚地说明了什么是“

schema”;然而,不同的数据库错误地实现了它。如果实现不正确,该功能可能会与父数据库的功能重叠,从而加剧这种混乱。SQL模式只是数据库中的一个名称空间,此名称空间中的内容使用成员操作符".“进行寻址。这似乎在所有实现中都是通用的。一个真正的完全(数据库、模式和表)限定的查询示例如下:select * from database.schema.table

现在,问题是,模式和数据库都可以用于将一个表、foo与另一个表隔离开来,比如命名表foo。下面是伪代码:select * from db1.foo与select * from db2.foo (在数据库和表之间没有明确的模式) select * from [db1.]default.foo与select * from [db1.]alternate.foo (没有明确的数据库前缀)出现的问题是,以前的MySQL用户会为一个项目创建多个数据库。在这种情况下,MySQL数据库在功能上类似于Postgres模式,因为Postgres缺乏MySQL所具有的现成的跨数据库功能。相反,Postgres应用了更多实现跨表、跨模式的规范,然后为未来的跨数据库功能留下了空间。幕后的MySQL别名、数据库的模式,比如create schema和create database类似。

因此,可以说,MySQL实现了交叉表功能,完全跳过了模式功能,并在其数据库的实现中提供了类似的功能。总之,Postgres完全支持模式,但缺少MySQL在数据库方面的一些功能,而Postgres甚至不尝试支持真正的模式。

票数 31
EN

Stack Overflow用户

发布于 2009-12-09 04:40:26

我相信,在MS SQL中说“schema”,您的意思是“所有者”。

据我所知,在MySQL中,当你做一个

代码语言:javascript
复制
SELECT * from world.city;

这个查询是从world数据库中选择表city。

在MsSQL中,您必须执行以下操作

代码语言:javascript
复制
SELECT * from world.dbo.city;

其中'dbo‘是表的默认所有者。

要使工作更容易,请通过键入以下命令定义默认数据库

代码语言:javascript
复制
USE world
SELECT * from city;

在MySQL中,无法声明表的所有者。即。“‘dbo”。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1869522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档