MySQL 'şema oluştur' ve 'veritabanı oluştur' - Herhangi bir fark var mı


104

İçine zirveye çıkarak information_schemaen veritabanı ve zirve meta verileri benim evcil projelerinden biri için ben zor anlar anlamakta zorluk ettiğimi farklılıklar arasında bulunmaktadır (varsa) create schemakomuta ve create databaseMySQL için komuta.

Herhangi bir fark var mı? Değilse, bu ilişkisel veritabanları için oldukça tipik bir davranış kalıbı mıdır (Oracle gibi diğer veritabanları için bir şemanın bir veritabanıyla aynı düzeyde olmaktan ziyade bir veritabanında bulunduğunu duydum).

Teşekkürler!

Yanıtlar:


140

MySQL dokümantasyonu diyor :

CREATE DATABASE, verilen isimle bir veritabanı oluşturur. Bu ifadeyi kullanmak için, veritabanı için CREATE ayrıcalığına ihtiyacınız var. CREATE SCHEMA, MySQL 5.0.2'den itibaren CREATE DATABASE ile eşanlamlıdır.

Dolayısıyla, bu iki talimatın aynı şeyi yapması normal görünür.


1
Mükemmel! Şemanın bir Veritabanı örneğinin parçası olduğunu varsaydım. Çok teşekkürler!!
2016

27

Mysql belgeleri şunu söylüyor: CREATE SCHEMA, MySQL 5.0.2'den itibaren CREATE DATABASE ile eşanlamlıdır .


bunların hepsi 80'lerin ortalarında SQL için bir ANSI standardına geri dönüyor.

Bu standardın bir "CREATE SCHEMA" komutu vardı ve tablo ve görünüm adları için birden fazla ad alanı sunmaya hizmet ediyordu. Tüm tablolar ve görünümler bir "şema" içinde oluşturulmuştur. Bu sürümün tablolara ve görünümlere bazı çapraz şema erişimi tanımlayıp tanımlamadığını bilmiyorum, ancak yaptığını varsayıyorum. AFAIR, hiçbir ürün (en azından o zamanlar) onu gerçekten uygulamadı, tüm bu kavram pratikten çok teoriydi.

OTOH, ISTR standardın bu sürümü bir "kullanıcı" veya "KULLANICI OLUŞTUR" komutu kavramına sahip değildi, bu nedenle "kullanıcı" konseptini kullanan ürünler vardı (daha sonra tablolar ve görünümler) "şema" eşdeğerlerini uygulamak için.

Bu, sistemlerin farklı olduğu bir alandır.

Yönetim söz konusu olduğunda, bu çok da önemli olmamalı, çünkü burada zaten farklılıklar var.

Uygulama koduna baktığınız sürece, "yalnızca" tek bir uygulamanın tablolara birden çok ad alanından eriştiği durumlarla ilgilenmeniz gerekir. AFAIK, tüm sistemler bir "." Sözdizimini destekler ve bunun için ad alanının bir kullanıcı, bir "şema" veya bir "veritabanı" olması önemli olmamalıdır.


@DerMike Hatırlayacak gibi görünüyorum, internetslang.com/ISTR-meaning-definition.asp
reevesy

2
Bu cevabın alındığı orijinal kaynağa bir atıfta bulunmak doğru olacaktır: lists.mysql.com/mysql/211647
informatik01

@ informatik01 Adinochestva orijinal bir poster değilse.
FanaticD

SQL Server,
SCHEMA'yı

7

Kesinlikle, Veritabanı ve Şema arasındaki fark MySql'de yoktur.

Ancak, SQL Server gibi diğer veritabanı motorlarında durum böyle değildir. SQL sunucusunda:,

Her tablo, veritabanı şeması adı verilen veritabanındaki nesnelerin bir grubuna aittir . Bir kapsayıcı veya ad alanıdır ( Microsoft SQL Server 2012'yi Sorgulamak )

Varsayılan olarak, SQL Server'daki tüm tablolar dbo adı verilen varsayılan bir şemaya aittir . Belirli bir şemaya tahsis edilmemiş bir tabloyu sorguladığınızda, aşağıdaki gibi bir şey yapabilirsiniz:

SELECT *
FROM your_table

bu şuna eşdeğerdir:

SELECT *
FROM dbo.your_table

Artık SQL sunucusu, size benzer bir amacı paylaşan tabloları gruplama imkanı veren farklı şemaların oluşturulmasına izin veriyor. Bu, veritabanını düzenlemeye yardımcı olur.

Örneğin, adlı bir şema oluşturabilir satış gibi tablolarla, faturalar , creditorders (ve satış ilgili diğer) ve adlı başka şema arama gibi tablolarla ülkeler , para birimleri , subscriptiontypes görünüm olarak kullanılan (ve diğer tablo up table).

Belirli bir etki alanına tahsis edilen tablolar, SQL Server Studio Manager'da, tablo adının başına eklenen şema adı ile görüntülenir (tam olarak varsayılan dbo şemasına ait tablolarla aynı ).

SQL Server'da özel şemalar bulunmaktadır. Aynı kitaptan alıntı yapmak için:

Birkaç yerleşik veritabanı şeması vardır ve bırakılamaz veya değiştirilemez:

1) dbo , varsayılan şema.

2) konuk , konuk bir kullanıcının kullanabileceği nesneleri içerir ("konuk kullanıcı", bazı varsayılan ve yüksek oranda kısıtlanmış izinlerle, SQL Server dilinde özel bir roldür). Nadiren kullanılmış.

3) Information Schema Views tarafından kullanılan INFORMATION_SCHEMA

4) sys , yalnızca SQL Server dahili kullanımı için ayrılmıştır

Şemalar sadece gruplama amaçlı değildir. MSDN'de açıklandığı gibi, her şema için farklı kullanıcılara farklı izinler vermek aslında mümkündür .

Bu şekilde, yukarıda bahsedilen şema araması , veri tabanındaki herhangi bir standart kullanıcı için kullanılabilir hale getirilebilir (örneğin SELECT, yalnızca izinler), tedarikçi bankaccountdetails adlı bir tablo , finansal adı verilen farklı bir şemada tahsis edilebilir ve yalnızca grup accounts(sadece bir örnek, fikri anladınız).

Son olarak ve aynı kitaptan tekrar alıntı yaparak:

Aynı Veritabanı Şeması ve Tablo Şeması değildir . İlki bir tablonun ad alanıdır, ikincisi ise tablo tanımını ifade eder



5

Veritabanı, şemaların bir koleksiyonudur ve şema, tabloların bir koleksiyonudur. Ancak MySQL'de de aynı şekilde kullanıyorlar.


1

Dolayısıyla, MySQL "veritabanı" ve MySQL "şeması" arasında bir fark yoktur: bunlar aynı şey için iki addır - tablolar ve diğer DB nesneleri için bir ad alanı.

Oracle geçmişi olan kişiler için: MySQL "veritabanı" aka MySQL "şeması" Oracle şemasına karşılık gelir. MySQL ve Oracle CREATE SCHEMA komutları arasındaki fark, Oracle'da CREATE SCHEMA komutunun aslında bir şema oluşturmaması, onu tablolar ve görünümlerle doldurmasıdır. Ve Oracle'ın CREATE DATABASE komutu, MySQL muadilinden çok farklı bir şey yapıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.