MySQL 'create schema' и 'create database' - есть ли разница?

104

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

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

Спасибо!

Боб
источник

Ответы:

140

В документации MySQL говорится :

CREATE DATABASE создает базу данных с заданным именем. Чтобы использовать этот оператор, вам потребуется привилегия CREATE для базы данных. CREATE SCHEMA является синонимом CREATE DATABASE в MySQL 5.0.2.

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

Паскаль МАРТИН
источник
1
Превосходно! Я предположил, что схема является частью экземпляра базы данных. Огромное спасибо!!
asgs 01
27

В документации Mysql говорится: CREATE SCHEMA является синонимом CREATE DATABASE в MySQL 5.0.2.


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

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

OTOH, ISTR в этой версии стандарта не было концепции «пользователя» или команды «СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ», поэтому были продукты, в которых использовалась концепция «пользователя» (у которого тогда было собственное пространство имен для таблиц и views) для реализации своего эквивалента «схемы».

Это область, в которой системы различаются.

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

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

Садех
источник
@DerMike, кажется,
напомню
2
Правильно будет дать ссылку на первоисточник, откуда был взят этот ответ: lists.mysql.com/mysql/211647
informatik01
@ informatik01 Если только Адиночество не оригинальный плакат.
FanaticD
SQL Server реализовал SCHEMA как группу таблиц / типов / .. в базе данных
Gudgip
7

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

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

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

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

SELECT *
FROM your_table

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

SELECT *
FROM dbo.your_table

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

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

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

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

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

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

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

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

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

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

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

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

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

Николас
источник
5

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

Арун Раджа
источник
1

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

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

Олег Хайкин
источник