2009-12-08 2 views
38

Каковы различия в терминологии базы данных между MS SQL и MySQL?Различия между базой данных и схемой с использованием разных баз данных?

Может ли экземпляр MySQL иметь более одной базы данных? Похоже, что он может создавать только разные схемы. Однако команда SQL - create database.

В MS SQL вы можете создавать несколько баз данных ... каждая из них имеет схему по умолчанию dbo? ... но возможно использование нескольких схем в базе данных?

ответ

64

Из этого link, мы видим, что схемы MS SQL больше не привязаны к пользователям, вот соответствующая цитата:

поведение схем изменилось в SQL Server 2005. SCHEMAS больше не эквивалентно пользователи базы данных; каждая схема теперь представляет собой различное пространство имен , которое существует независимо от пользователя базы данных , который его создал. В других словах схема представляет собой просто контейнер объектов. К моделям может принадлежать любого пользователя, а его владельцем является .

В MySQL, базы данных и схемы точно то же самое, вы можете даже поменять местами слова в командах, т.е. CREATE DATABASE имеет синоним CREATE SCHEMA.

MySQL поддерживает несколько баз данных (схемы), а MS SQL поддерживает несколько баз данных и несколько схем.

+1

Префикс табличного имени используется в MySQL как практика для охвата функции схемы, хотя это не является правильным решением, это обычная практика в MySQL. wp_config - где wp для wordpress. – sujaisd

2

MS SQL Определенно поддерживает несколько баз данных, каждая из которых содержит от 1 до многих схем, а dbo - только по умолчанию для обратной совместимости.

4

Я считаю, что, говоря «схема» для MS SQL, вы имеете в виду «владелец».

Из моего понимания, в MySQL, когда вы делаете

SELECT * from world.city; 

Этот запрос выбирает из базы данных мировой таблицы города.

В MsSQL вы должны сделать

SELECT * from world.dbo.city; 

Где ДБО "по умолчанию является владельцем таблицы.

Чтобы сделать жизнь проще определить базу данных по умолчанию, набрав

USE world 
SELECT * from city; 

В MySQL нет никакого способа, чтобы объявить владелец таблицы. то есть. "ДБО.

27

В целом, я нашел следующую статью: on Wikipedia.

В нижней части этой статьи заключается в следующем:

Спецификация SQL ясно, что такое «SQL-схема» является; однако разные базы данных реализуют его неправильно. Чтобы усугубить эту путаницу, функциональность может при неправильном внедрении перекрываться с функциональностью родительской базы данных.Схема SQL - это просто пространство имен в базе данных, вещи в этом пространстве имен адресуются с помощью оператора-члена «.». Это похоже на универсальность среди всех реализаций. Истинный полностью (база данных, схемы и таблицы) квалифицируется запрос в качестве примера такой: select * from database.schema.table

Теперь вопрос, как схема и база данных может быть использована для выделения одной таблицы, foo от другого как по имени таблицы foo , Ниже приведен псевдокод: select * from db1.foo по сравнению с select * from db2.foo (без явной схемы между db и table) select * from [db1.]default.foo против select * from [db1.]alternate.foo (без явного префикса db). Проблема заключается в том, что бывшие пользователи MySQL создают несколько баз данных для одного проекта. В этом контексте базы данных MySQL аналогичны функциям Postgres-схем, так как Postgres не имеет готовых кросс-баз данных, которые MySQL имеет. Напротив, Postgres применил больше спецификаций, реализующих кросс-таблицу, кросс-схему, а затем оставил место для будущих функций кросс-баз данных. Алиасы MySQL за кулисами, схема с базой данных, такая, что создание схемы и создание базы данных являются аналогами.

Можно сказать, что MySQL, таким образом, реализовал функции кросс-таблицы, полностью пропустил функциональность схемы и предоставил аналогичную функциональность в своей реализации базы данных. Таким образом, Postgres полностью поддерживает схемы, но не имеет некоторых функций MySQL с базами данных, в то время как MySQL даже не пытается поддерживать истинные схемы.

+0

+1 Отличный фон! :) – simgineer

+0

«как схема, так и база данных могут использоваться для изоляции одной таблицы». Вау, это действительно сбивает с толку, если вы уже понимаете, что в MySQL схема * является * базой данных. Но, я думаю, смысл статьи - научить людей, которые не знакомы. Спасибо за цитату. –