使用不同数据库的数据库和架构之间的差异?

时间:2009-12-08 20:10:25

标签: mysql sql-server database schema

MS SQL和MySQL之间的数据库术语有何不同?

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

在MS SQL中,您可以创建多个数据库...每个都有一个默认模式dbo?...但数据库中仍有多个模式?

4 个答案:

答案 0 :(得分:67)

从这个link,我们看到MS SQL模式不再与用户绑定,这是相关的引用:

  

SQL中更改了模式的行为   Server 2005.架构不再存在   相当于数据库用户;每   schema现在是一个独特的命名空间   独立存在的   创建它的数据库用户。其他   单词,架构只是一个容器   对象架构可以由。拥有   任何用户,其所有权是   转让。

在MySQL中,数据库和模式完全相同,甚至可以在命令中交换单词,即CREATE DATABASE具有同义词CREATE SCHEMA。

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

答案 1 :(得分:28)

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

在文章的底部是以下内容:

  

SQL规范明确了“SQL模式”是什么;但是,不同的数据库错误地实现它。为了加剧这种混淆,当错误实现时,功能可以与父数据库的功能重叠。 SQL模式只是数据库中的命名空间,此命名空间中的内容使用成员运算符点“。”进行寻址。这似乎是所有实现中的通用。   真正的完全(数据库,模式和表)限定查询的示例如下:select * from database.schema.table

     

现在,问题,模式和数据库都可用于将一个表foo与另一个表隔离,如命名表foo。以下是伪代码:select * from db1.fooselect * from db2.foo(db和表之间没有显式模式)select * from [db1.]default.fooselect * from [db1.]alternate.foo(没有显式数据库前缀)出现的问题是以前的MySQL用户将为一个项目创建多个数据库。在这种情况下,MySQL数据库在功能上类似于Postgres-schemas,因为Postgres缺乏MySQL所拥有的现成的跨数据库功能。相反,Postgres已经应用了更多实现跨表,跨架构的规范,然后为未来的跨数据库功能留出了空间。 MySQL后面的别名,带有数据库的模式,这样创建模式,创建数据库就是模拟。

     

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

答案 2 :(得分:4)

我相信通过对MS SQL说'schema',你的意思是'所有者'。

根据我的理解,在你做的时候在MySQL中

SELECT * from world.city;

此查询从世界数据库中选择表格城市。

在MsSQL中你必须做一个

SELECT * from world.dbo.city;

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

通过输入

来简化生活,定义默认数据库
USE world
SELECT * from city;

在MySQL中,无法声明表的所有者。即。 'DBO'。

答案 3 :(得分:2)

MS SQL绝对支持多个数据库,每个数据库都有1到多个模式,dbo仅是出于向后兼容目的的默认设置。