Differenza tra schema / database in MySQL


290

C'è una differenza tra uno schema e un database in MySQL? In SQL Server, un database è un contenitore di livello superiore in relazione a uno schema.

L'ho letto Create Schemae Create Databasefaccio essenzialmente la stessa cosa in MySQL, il che mi porta a credere che schemi e database siano parole diverse per gli stessi oggetti.


In realtà direi che schemaè meglio di database, dato che MySQL è una specie di database e ne contiene diversi database, e talvolta anche tu useun database, che fa sì che molte ricerche non raggiungano l'obiettivo.
theaws.blog

Risposte:


335

Come definito nel Glossario MySQL :

In MySQL, fisicamente, uno schema è sinonimo di un database . È possibile sostituire la parola chiave SCHEMAanziché DATABASEnella sintassi SQL di MySQL, ad esempio utilizzando CREATE SCHEMAinvece di CREATE DATABASE.

Alcuni altri prodotti di database fanno una distinzione. Ad esempio, nel prodotto Oracle Database, uno schema rappresenta solo una parte di un database: le tabelle e altri oggetti di proprietà di un singolo utente.


74
Penso che "alcuni altri prodotti di database" sia davvero un eufemismo per quasi tutti gli altri database (forse tranne SQLite, ma questo è comprensibile).
Stefan Steiger,

5
Rendere lo schema sinonimo di database è interessante - l'ho sempre associato agli oggetti utente. E una menzione amichevole di SQL Server che separava il concetto utente / schema consentendo un carico di flessibilità e alcuni modi interessanti per eseguire query dinamiche.
Gerard ONeill

La cosa fastidiosa nel definire "schema" come un raggruppamento di oggetti di database è che sovraccarica il significato più vecchio della parola, ad esempio en.wikipedia.org/wiki/Database_schema .
Mark E. Haase

1
@mehaase entrambi sono il vecchio significato della parola. Oracle aveva schemi prima ancora di SQL3 (1999), anche se li trattava come altri database avrebbero calcato database completi. In effetti, Oracle chiama "database" ciò che gli altri chiamano un server o un'istanza del server: binari diversi, eseguibili diversi, porte diverse.
Panagiotis Kanavos,

61

Dipende dal server di database. MySQLnon importa, è praticamente la stessa cosa.

Oracle, DB2e altre soluzioni di database a livello aziendale fanno una distinzione. Di solito uno schema è una raccolta di tabelle e un database è una raccolta di schemi.


6
Anche Microsoft SQL Server ha una distinzione molto simile come Oraclee DB2per questo caso.
RBT,

2
In MySQL "database" e "schema" non sono sostanzialmente la stessa cosa; è esattamente la stessa cosa (per esempio, create databasee create schemasono sinonimi). In Oracle lo schema è sinonimo di utente (forse più precisamente, lo schema è un elenco di tutti gli oggetti creati sotto un utente). MSSQL distingue tutti e tre (e di conseguenza, quando si accede a una tabella da un database diverso, il nome deve essere qualificato sia dal database che dallo schema, ad esempio database1.dbo.table2)
Mike Rosoft,

17

Facendo riferimento alla documentazione di MySql ,

CREATE DATABASE crea un database con il nome specificato. Per utilizzare questa istruzione, è necessario il privilegio CREATE per il database. CREATE SCHEMA è sinonimo di CREATE DATABASE a partire da MySQL 5.0.2.


7

PostgreSQL supporta gli schemi, che è un sottoinsieme di un database: https://www.postgresql.org/docs/current/static/ddl-schemas.html

Un database contiene uno o più schemi denominati, che a loro volta contengono tabelle. Gli schemi contengono anche altri tipi di oggetti denominati, inclusi tipi di dati, funzioni e operatori. Lo stesso nome oggetto può essere utilizzato in diversi schemi senza conflitti; ad esempio, sia schema1 che myschema possono contenere tabelle denominate mytable. A differenza dei database, gli schemi non sono rigidamente separati: un utente può accedere agli oggetti in uno qualsiasi degli schemi nel database a cui è connesso, se ha i privilegi per farlo.

Gli schemi sono analoghi alle directory a livello di sistema operativo, tranne per il fatto che gli schemi non possono essere nidificati.

Secondo la mia modesta opinione, MySQL non è un database di riferimento. Non dovresti mai citare MySQL per una spiegazione. MySQL implementa SQL non standard e talvolta sostiene funzionalità che non supporta. Ad esempio, in MySQL, lo schema CREATE creerà solo un DATABASE. È davvero fuorviante per gli utenti.

Questo tipo di vocabolario è chiamato "MySQLism" dai DBA.


2
E poi ci sono "schemi" da aggiungere alla confusione per i principianti :)
Zeni,

@Zeni che cos'è esattamente uno schema in MySQL? Tutto quello che ho potuto trovare sono riferimenti alla tabella degli schemi information_schema ma nessuna definizione concisa su cosa significhi effettivamente
Alf47

@Alf47 "schemata" è solo la forma plurale della parola "schema". Anche "schemi" è accettabile, ma non altrettanto elegante :)
jobo3208

6

nello schema MySQL è sinonimo di database . È abbastanza confuso per le persone principianti che saltano su MySQL e il primo giorno trovano la parola schema , quindi ragazzi niente di cui preoccuparsi poiché entrambi sono uguali.

Quando si avvia MySQL per la prima volta, è necessario creare un database (come qualsiasi altro sistema di database) con cui lavorare in modo da poter CREARE SCHEMA che non è altro che CREARE DATABASE

In alcuni altri database lo schema di sistema rappresenta una parte del database o una raccolta di tabelle e la raccolta di schemi è un database.


3

Sì, le persone usano questi termini in modo intercambiabile rispetto a MySQL. Sebbene spesso sentirai le persone riferirsi in modo inappropriato all'intero server di database come database.


0

Microsoft SQL Server, ad esempio, gli schemi si riferiscono a un singolo utente ed è un altro livello di un contenitore nell'ordine in cui sono indicati il ​​server, il database, lo schema, le tabelle e gli oggetti.

Ad esempio, quando si intende aggiornare dbo.table_a e la sintassi non è pienamente qualificata come la tabella UPDATE.a il DBMS non può decidere di utilizzare la tabella prevista. Essenzialmente per impostazione predefinita il DBMS utilizzerà myuser.table_a


Gli schemi sono di proprietà di un singolo utente. Per impostazione predefinita, un utente creato nel database utilizza lo schema dbo come schema predefinito. Lo schema predefinito utilizzato per un riferimento di tabella non completo è ciò che è impostato per quell'utente.
Gerard ONeill

Nelle versioni precedenti di SQL Server, l'eliminazione di un utente renderebbe inutilizzabile lo schema ad esso associato. In questi giorni la mappatura tra utente e schema è meno rigorosa. Inoltre, si ritiene che sia consigliabile creare un unico account falso per il proprietario del database e tutti gli schemi.
Jonathan Allen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.