MySQL 'buat skema' dan 'buat database' - Apakah ada perbedaan

104

Mengambil puncak ke information_schemadatabase dan memuncak pada metadata untuk salah satu proyek hewan peliharaan saya, saya mengalami kesulitan memahami apa (jika ada) perbedaan antara create schemaperintah dan create databaseperintah untuk MySQL.

Apakah ada perbedaan? Jika tidak, apakah ini pola perilaku yang agak khas untuk database relasional (saya pernah mendengar bahwa untuk database lain, seperti Oracle, skema ada dalam database, bukan pada level yang sama dengan database).

Terima kasih!

Bob
sumber

Jawaban:

140

The dokumentasi MySQL mengatakan :

CREATE DATABASE membuat database dengan nama yang diberikan. Untuk menggunakan pernyataan ini, Anda memerlukan hak istimewa CREATE untuk database. CREATE SCHEMA adalah sinonim untuk CREATE DATABASE pada MySQL 5.0.2.

Jadi, wajar jika kedua instruksi itu melakukan hal yang sama.

Pascal MARTIN
sumber
1
Luar biasa! Saya berasumsi skema adalah bagian dari instance Database. Terima kasih banyak!!
asgs
27

Dokumentasi Mysql mengatakan: CREATE SCHEMA adalah sinonim untuk CREATE DATABASE pada MySQL 5.0.2.


ini semua kembali ke standar ANSI untuk SQL di pertengahan 80-an.

Standar tersebut memiliki perintah "BUAT SKEMA", dan berfungsi untuk memperkenalkan beberapa ruang nama untuk nama tabel dan tampilan. Semua tabel dan tampilan dibuat dalam "skema". Saya tidak tahu apakah versi itu mendefinisikan beberapa akses skema silang ke tabel dan tampilan, tetapi saya berasumsi demikian. AFAIR, tidak ada produk (setidaknya saat itu) yang benar-benar menerapkannya, bahwa keseluruhan konsep itu lebih merupakan teori daripada praktik.

OTOH, ISTR versi standar ini tidak memiliki konsep perintah "pengguna" atau "CREATE USER", jadi ada produk yang menggunakan konsep "pengguna" (yang kemudian memiliki ruang namanya sendiri untuk tabel dan views) untuk mengimplementasikan padanannya dengan "skema".

Ini adalah area di mana sistemnya berbeda.

Mengenai administrasi, ini seharusnya tidak terlalu menjadi masalah, karena di sini Anda memiliki perbedaan.

Sejauh Anda melihat kode aplikasi, Anda "hanya" harus peduli dengan kasus di mana satu aplikasi mengakses tabel dari beberapa ruang nama. AFAIK, semua sistem mendukung sintaks ".", Dan untuk ini tidak masalah apakah ruang nama adalah milik pengguna, "skema", atau "database".

Sadegh
sumber
@DerMike I Seem To Recall, internetslang.com/ISTR-meaning-definition.asp
reevesy
2
Adalah benar untuk memberikan referensi ke sumber asli, dari mana jawaban ini diambil: lists.mysql.com/mysql/211647
informatik01
@ informatik01 Kecuali Adinochestva adalah poster asli.
FanaticD
SQL Server mengimplementasikan SCHEMA sebagai sekelompok tabel / jenis / .. dalam database
Gudgip
7

Sebenarnya, perbedaan antara Database dan Schema tidak ada di MySql.

Namun, ini tidak terjadi di mesin database lain seperti SQL Server. Di server SQL :,

Setiap tabel termasuk dalam kelompok objek dalam database yang disebut skema database . Ini adalah wadah atau namespace ( Querying Microsoft SQL Server 2012 )

Secara default, semua tabel di SQL Server termasuk dalam skema default yang disebut dbo . Saat Anda membuat kueri tabel yang belum dialokasikan ke skema tertentu, Anda bisa melakukan sesuatu seperti:

SELECT *
FROM your_table

yang setara dengan:

SELECT *
FROM dbo.your_table

Sekarang, server SQL memungkinkan pembuatan skema yang berbeda, yang memberi Anda kemungkinan untuk mengelompokkan tabel yang memiliki tujuan yang sama. Itu membantu mengatur database.

Misalnya, Anda dapat membuat skema yang disebut penjualan , dengan tabel seperti faktur , pemesan kredit (dan lainnya yang terkait dengan penjualan), dan skema lain yang disebut pencarian , dengan tabel seperti negara , mata uang , jenis langganan (dan tabel lain yang digunakan sebagai tampilan atas meja).

Tabel yang dialokasikan ke domain tertentu ditampilkan di SQL Server Studio Manager dengan nama skema diawali dengan nama tabel (persis sama dengan tabel milik skema dbo default ).

Ada skema khusus di SQL Server. Mengutip buku yang sama:

Ada beberapa skema database bawaan, dan tidak dapat dihapus atau diubah:

1) dbo , skema default.

2) tamu berisi objek yang tersedia untuk pengguna tamu ("pengguna tamu" adalah peran khusus dalam istilah SQL Server, dengan beberapa izin default dan sangat terbatas). Jarang digunakan.

3) INFORMATION_SCHEMA , digunakan oleh Tampilan Skema Informasi

4) sys , disediakan untuk penggunaan internal SQL Server secara eksklusif

Skema tidak hanya untuk pengelompokan. Sebenarnya dimungkinkan untuk memberikan izin yang berbeda untuk setiap skema kepada pengguna yang berbeda, seperti yang dijelaskan MSDN .

Dengan cara ini, pencarian skema yang disebutkan di atas dapat tersedia untuk semua pengguna standar dalam database (misalnya SELECThanya izin), sedangkan tabel yang disebut supplierbankaccountdetails dapat dialokasikan dalam skema berbeda yang disebut finansial , dan untuk memberikan akses hanya kepada pengguna di kelompok accounts(hanya contoh, Anda mendapatkan ide).

Akhirnya, dan mengutip lagi buku yang sama:

Ini bukan Skema Database dan Skema Tabel yang sama . Yang pertama adalah namespace dari sebuah tabel, sedangkan yang terakhir mengacu pada definisi tabel

Nicolas
sumber
6

CREATE SCHEMA adalah sinonim dari CREATE DATABASE. BUAT Sintaks DATABASE

Sergey Olontsev
sumber
5

Database adalah kumpulan skema dan skema adalah kumpulan tabel. Tapi di MySQL mereka menggunakannya dengan cara yang sama.

Arun Raja
sumber
1

Jadi, tidak ada perbedaan antara "database" MySQL dan "skema" MySQL: ini adalah dua nama untuk hal yang sama - namespace untuk tabel dan objek DB lainnya.

Untuk orang-orang dengan latar belakang Oracle: "database" MySQL alias "skema" MySQL sesuai dengan skema Oracle. Perbedaan antara perintah MySQL dan Oracle CREATE SCHEMA adalah bahwa di Oracle, perintah CREATE SCHEMA tidak benar-benar membuat skema tetapi mengisinya dengan tabel dan tampilan. Dan perintah Oracle CREATE DATABASE melakukan hal yang sangat berbeda dari rekan MySQL-nya.

Oleg Khaykin
sumber