MySQL "создать схему" и "создать базу данных" - есть ли разница

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

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

Спасибо!

7 ответов

Решение

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

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

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

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


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

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

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

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

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

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

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

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

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

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

SELECT *
FROM your_table

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

SELECT *
FROM dbo.your_table

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

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

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

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

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

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

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

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

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

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

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

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

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

CREATE SCHEMA является синонимом CREATE DATABASE. Синтаксис CREATE DATABASE

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

нет никакой разницы между «базой данных» MySQL и «схемой» MySQL: это два названия одного и того же

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

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

Другие вопросы по тегам