MySQL „utwórz schemat” i „utwórz bazę danych” - czy jest jakaś różnica

104

Biorąc szczyt do information_schemabazy danych i podchodząc do metadanych dla jednego z moich projektów dla zwierząt domowych, trudno mi zrozumieć, jakie (jeśli w ogóle) istnieją różnice między create schemapoleceniem a create databasepoleceniem MySQL.

Czy są jakieś różnice? Jeśli nie, to czy jest to raczej typowy wzorzec zachowania dla relacyjnych baz danych (słyszałem, że w przypadku innych baz danych, takich jak Oracle, schemat istnieje w bazie danych, a nie jest na tym samym poziomie co baza danych).

Dzięki!

Pion
źródło

Odpowiedzi:

140

Dokumentacja MySQL mówi :

CREATE DATABASE tworzy bazę danych o podanej nazwie. Aby użyć tej instrukcji, musisz mieć uprawnienie CREATE do bazy danych. CREATE SCHEMA jest synonimem CREATE DATABASE od MySQL 5.0.2.

Tak więc wydaje się normalne, że te dwie instrukcje robią to samo.

Pascal MARTIN
źródło
1
Doskonały! Założyłem, że schemat jest częścią instancji bazy danych. Dziękuję bardzo!!
asgs
27

Dokumentacja MySQL mówi: CREATE SCHEMA jest synonimem CREATE DATABASE od MySQL 5.0.2.


wszystko to wraca do standardu ANSI dla SQL w połowie lat 80-tych.

Ten standard miał polecenie „CREATE SCHEMA” i służył do wprowadzenia wielu przestrzeni nazw dla nazw tabel i widoków. Wszystkie tabele i widoki zostały utworzone w ramach „schematu”. Nie wiem, czy ta wersja definiowała dostęp do tabel i widoków w różnych schematach, ale zakładam, że tak. AFAIR, żaden produkt (przynajmniej wtedy) tak naprawdę go nie wdrażał, cała koncepcja była bardziej teorią niż praktyką.

OTOH, ISTR ta wersja standardu nie zawierała pojęcia „użytkownika” ani „UTWÓRZ UŻYTKOWNIKA”, więc istniały produkty, które wykorzystywały pojęcie „użytkownika” (który miał wtedy własną przestrzeń nazw dla tabel i widoki), aby zaimplementować ich odpowiednik „schematu”.

To obszar, w którym systemy się różnią.

Jeśli chodzi o administrację, nie powinno to mieć większego znaczenia, bo tutaj i tak są różnice.

Jeśli spojrzysz na kod aplikacji, musisz zająć się „tylko” przypadkami, w których jedna aplikacja uzyskuje dostęp do tabel z wielu przestrzeni nazw. AFAIK, wszystkie systemy obsługują składnię „.” I nie powinno mieć tu znaczenia, czy przestrzeń nazw jest przestrzenią użytkownika, „schematem” czy „bazą danych”.

Sadegh
źródło
@DerMike I Seem To Recall, internetslang.com/ISTR-meaning-definition.asp
reevesy
2
Dobrze byłoby podać odniesienie do oryginalnego źródła, skąd wzięła się ta odpowiedź: lists.mysql.com/mysql/211647
informatik01
@ informatik01 Chyba że Adinochestva to oryginalny plakat.
FanaticD
SQL Server zaimplementował SCHEMAT jako grupę tabel / typów / .. w bazie danych
Gudgip
7

Ściśle mówiąc, różnica między Database i Schema jest inexisting w MySQL.

Jednak nie dotyczy to innych silników baz danych, takich jak SQL Server. Na serwerze SQL :,

Każda tabela należy do grupy obiektów w bazie danych zwanej schematem bazy danych . To kontener lub przestrzeń nazw ( zapytania dotyczące Microsoft SQL Server 2012 )

Domyślnie wszystkie tabele w SQL Server należą do domyślnego schematu o nazwie dbo . Kiedy odpytujesz tabelę, która nie została przydzielona do żadnego konkretnego schematu, możesz zrobić coś takiego:

SELECT *
FROM your_table

co jest równoważne z:

SELECT *
FROM dbo.your_table

Teraz serwer SQL pozwala na tworzenie różnych schematów, co daje możliwość grupowania tabel o podobnym przeznaczeniu. To pomaga uporządkować bazę danych.

Na przykład możesz utworzyć schemat o nazwie sprzedaż z tabelami, takimi jak faktury , zlecenia kredytowe (i wszelkie inne związane ze sprzedażą) oraz inny schemat zwany wyszukiwaniem , z tabelami takimi jak kraje , waluty , typy subskrypcji (i wszelkie inne tabele używane jako wygląd w górę tabeli).

Tabele przydzielone do określonej domeny są wyświetlane w programie SQL Server Studio Manager z nazwą schematu poprzedzoną nazwą tabeli (dokładnie tak samo, jak tabele należące do domyślnego schematu dbo ).

W SQL Server są specjalne schematy. Cytując tę ​​samą książkę:

Istnieje kilka wbudowanych schematów bazy danych i nie można ich usunąć ani zmienić:

1) dbo , domyślny schemat.

2) gość zawiera obiekty dostępne dla użytkownika-gościa („użytkownik-gość” to specjalna rola w języku SQL Server, z pewnymi domyślnymi i bardzo ograniczonymi uprawnieniami). Rzadko używane.

3) INFORMATION_SCHEMA , używany przez widoki schematu informacyjnego

4) sys , zarezerwowane wyłącznie do użytku wewnętrznego programu SQL Server

Schematy służą nie tylko do grupowania. W rzeczywistości możliwe jest nadanie różnych uprawnień dla każdego schematu różnym użytkownikom, zgodnie z opisem MSDN .

W ten sposób wspomniane powyżej wyszukiwanie schematu mogłoby być udostępnione każdemu standardowemu użytkownikowi w bazie danych (np. SELECTTylko uprawnienia), podczas gdy tabela o nazwie dostawcabankaccountdetails może być przydzielona w innym schemacie zwanym finansowym i dawać dostęp tylko użytkownikom w grupę accounts(tylko przykład, masz pomysł).

Wreszcie, cytując ponownie tę samą książkę:

To nie jest ten sam schemat bazy danych i schemat tabeli . Pierwsza to przestrzeń nazw tabeli, podczas gdy druga odwołuje się do definicji tabeli

Nicolas
źródło
5

Baza danych to zbiór schematów, a schemat to zbiór tabel. Ale w MySQL używają go w ten sam sposób.

Arun Raja
źródło
1

Tak więc nie ma różnicy między „bazą danych” MySQL a „schematem” MySQL: są to dwie nazwy tego samego - przestrzeni nazw dla tabel i innych obiektów bazy danych.

Dla osób z doświadczeniem w Oracle: „Baza danych” MySQL, inaczej „Schemat” MySQL, odpowiada schematowi Oracle. Różnica między poleceniami MySQL i Oracle CREATE SCHEMA polega na tym, że w Oracle polecenie CREATE SCHEMA w rzeczywistości nie tworzy schematu, ale raczej wypełnia go tabelami i widokami. A polecenie Oracle CREATE DATABASE robi zupełnie inne rzeczy niż jego odpowiednik MySQL.

Oleg Khaykin
źródło