MySQL «создать схему» и «создать базу данных» - есть ли разница - PullRequest
95 голосов
/ 03 августа 2009

Взяв пик в базе данных information_schema и достигнув пика в метаданных для одного из моих любимых проектов, я с трудом понимаю, какие (если они есть) различия между create schema команда и команда create database для MySQL.

Есть ли различия? Если нет, то является ли это довольно типичной моделью поведения для реляционных баз данных (я слышал, что для других баз данных, таких как Oracle, схема существует в базе данных, а не на том же уровне, что и база данных).

Спасибо!

Ответы [ 6 ]

128 голосов
/ 03 августа 2009

Документация MySQL гласит :

CREATE DATABASE создает базу данных с указанным именем. Чтобы использовать это Скажите, вам нужен СОЗДАТЬ привилегия для базы данных. СОЗДАЙТЕ SCHEMA - это синоним CREATE БАЗА ДАННЫХ от MySQL 5.0.2.

Так что, кажется, что эти две инструкции делают то же самое.

27 голосов
/ 03 августа 2009

Документация Mysql говорит: CREATE SCHEMA - это синоним CREATE DATABASE с MySQL 5.0.2.


все это восходит к стандарту ANSI для SQL в середине 80-х годов.

Этот стандарт имел команду "CREATE SCHEMA", и он служил для введения несколько пространств имен для имен таблиц и представлений. Все таблицы и представления были созданный в рамках "схемы". Я не знаю, была ли определена эта версия некоторый кросс-схемный доступ к таблицам и представлениям, но я предполагаю, что это так. AFAIR, ни один продукт (по крайней мере, тогда) действительно не реализовал его, это целое Концепция была больше теории, чем практики.

OTOH, ISTR эта версия стандарта не имела понятия «пользователь» или «CREATE USER», поэтому были продукты, которые использовали понятие «пользователь» (который тогда имел свое собственное пространство имен для таблиц и представления), чтобы реализовать их эквивалент "схемы".

Это область, где системы различаются.

Что касается администрации, это не должно иметь большого значения, потому что здесь у вас все равно есть различия.

Что касается кода приложения, вам нужно заботиться только о случаи, когда одно приложение обращается к таблицам из нескольких пространств имен. AFAIK, все системы поддерживают синтаксис ".", и для этого не должно иметь значения, является ли пространство имен пользователь, "схема" или "база данных".

7 голосов
/ 10 ноября 2016

Строго говоря, разница между База данных и Схема отсутствует в MySql.

Однако это не относится к другим механизмам баз данных, таким как SQL Server. На сервере SQL :,

Каждая таблица принадлежит к группе объектов в базе данных, называемой схема базы данных . Это контейнер или пространство имен ( Запрос Microsoft SQL Server 2012 )

По умолчанию все таблицы в SQL Server принадлежат схеме по умолчанию, которая называется dbo . Когда вы запрашиваете таблицу, которая не была выделена какой-либо конкретной схеме, вы можете сделать что-то вроде:

SELECT *
FROM your_table

, что эквивалентно:

SELECT *
FROM dbo.your_table

Теперь сервер SQL позволяет создавать различные схемы, что дает вам возможность группировать таблицы с одинаковым назначением. Это помогает организовать базу данных.

Например, вы можете создать схему с именем sales , с таблицами, такими как счета , кредиторы (и любые другие, связанные с продажами), и другие схема с именем lookup , с таблицами, такими как страны , валюты , subscriptiontypes (и любая другая таблица, используемая в качестве таблицы поиска).

Таблицы, выделенные для определенного домена, отображаются в SQL Server Studio Manager с именем схемы, добавленным перед именем таблицы (точно так же, как таблицы, принадлежащие схеме по умолчанию dbo ).

В SQL Server есть специальные схемы. Цитировать ту же книгу:

Существует несколько встроенных схем баз данных, и их нельзя удалить или изменить:

1) dbo , схема по умолчанию.

2) guest содержит объекты, доступные для guest user («guest user» - это особая роль в языке SQL Server с некоторыми разрешениями по умолчанию и жесткими ограничениями). Редко используется.

3) INFORMATION_SCHEMA , используется представлениями информационной схемы

4) sys , зарезервировано исключительно для внутреннего использования SQL Server

Схемы предназначены не только для группировки. Фактически можно дать разные разрешения для каждой схемы разным пользователям, как описано MSDN .

Таким образом, упомянутая выше схема lookup может быть предоставлена ​​любому стандартному пользователю в базе данных (например, только SELECT permissions), тогда как таблица с именем supplierbankaccountdetails может выделяться в другой схеме под названием financial и предоставлять доступ только пользователям в группе accounts (просто пример, вы поняли).

Наконец, и снова цитирую ту же книгу:

Это не то же самое Схема базы данных и Схема таблицы . Первое - это пространство имен таблицы, а второе - определение таблицы

6 голосов
/ 03 августа 2009

CREATE SCHEMA - это синоним CREATE DATABASE. Синтаксис CREATE DATABASE

5 голосов
/ 27 ноября 2014

База данных представляет собой набор схем, а схема представляет собой набор таблиц. Но в MySQL они используют его так же.

0 голосов
/ 04 декабря 2018

Таким образом, нет никакой разницы между MySQL «база данных» и MySQL «схема»: это два имени для одной и той же вещи - пространство имен для таблиц и других объектов БД.

Для людей с опытом работы с Oracle: MySQL «база данных» a.k.a. MySQL «схема» соответствует схеме Oracle. Разница между командами MySQL и Oracle CREATE SCHEMA заключается в том, что в Oracle команда CREATE SCHEMA фактически не создает схему, а заполняет ее с таблицами и представлениями. И команда Oracle CREATE DATABASE делает совсем не то, что ее аналог MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...