使用不同数据库的数据库和模式之间的差异?
MS SQL和MySQL之间的数据库术语有什么区别?
一个MySQL实例可以有多个数据库吗? 看起来它只能创build不同的模式。 但是,SQL命令是create database
。
在MS SQL中,可以创build多个数据库…每个数据库都有一个默认的dbo模式?但是数据库中的多个模式仍然是可能的?
从这个链接中 ,我们看到MS SQL模式不再与用户绑定在一起,下面是相关的引用:
模式的行为在SQL Server 2005中发生了变化。模式不再等同于数据库用户; 现在每个模式都是独立于创build数据库用户的独立名称空间。 换句话说,一个模式只是一个对象的容器。 架构可以由任何用户拥有,其拥有权可以转让。
在MySQL中,数据库和模式是完全一样的,甚至可以在命令中交换单词,即CREATE DATABASE具有CREATE SCHEMA的同义词。
MySQL支持多个数据库(模式),MS SQL支持多个数据库和多个模式。
一般来说,我发现维基百科上的以下文章是有用的。
在文章的底部是以下内容:
SQL规范明确了“SQL模式”是什么; 但是,不同的数据库不正确地执行它。 为了弥补这种混淆,function可能在错误地实现时与父数据库重叠。 一个SQL模式只是数据库中的一个命名空间,这个命名空间中的东西使用成员操作符“。”来处理。 这在所有的实现中似乎都是普遍的。 一个真正完全(数据库,模式和表)合格的查询就是这样例示的:
select * from database.schema.table
现在,这个问题,模式和数据库都可以用来隔离一个表,
foo
与另一个表foo
。 下面是伪代码:select * from db1.foo
vs.select * from db2.foo
(db和table之间没有显式模式)select * from [db1.]default.foo
与select * from [db1.]alternate.foo
(没有显式数据库前缀)出现的问题是,以前的MySQL用户将为一个项目创build多个数据库。 在这种情况下,MySQL数据库在function上类似于Postgres模式,例如Postgres缺lessMySQL所具有的现成的跨数据库function。 相反,Postgres已经应用了更多的规范来实现交叉表,交叉模式,然后为未来的跨数据库function留下空间。 幕后的MySQL别名,带有数据库的模式,创build模式和创build数据库都是类比。可以这么说,MySQL因此已经实现了交叉表function,完全跳过了模式function,并为其数据库的实现提供了类似的function 。 总而言之,Postgres完全支持模式,但缺lessMySQL对数据库的一些function,而MySQL甚至不支持真正的模式。
我相信通过说MS SQL的“模式”,你的意思是“所有者”。
从我的理解,在你做MySQL的时候
SELECT * from world.city;
这个查询是从世界数据库中select表格城市。
在MsSQL中,你将不得不做一个
SELECT * from world.dbo.city;
“dbo”是表的默认所有者。
为了使生活更容易通过键入来定义默认的数据库
USE world SELECT * from city;
在MySQL中,没有办法声明表的所有者。 即。 'DBO'。
MS SQL明确支持多个数据库,每个数据库都有1到多个模式,dbo仅仅是为了向后兼容的目的而默认的。