MySQL "crea schema" e "crea database" - C'è qualche differenza


104

Dando un'occhiata al information_schemadatabase e raggiungendo i metadati per uno dei miei progetti preferiti, ho difficoltà a capire quali (se presenti) differenze ci sono tra il create schemacomando e il create databasecomando per MySQL.

Ci sono differenze? In caso contrario, si tratta di un modello di comportamento piuttosto tipico per i database relazionali (ho sentito che per altri database, come Oracle, esiste uno schema in un database, piuttosto che essere allo stesso livello di un database).

Grazie!

Risposte:


140

La documentazione di MySQL dice :

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.

Quindi, sembrerebbe normale che queste due istruzioni facciano lo stesso.


1
Eccellente! Presumo che lo schema faccia parte di un'istanza di database. Grazie mille!!
asgs

27

La documentazione Mysql dice: CREATE SCHEMA è sinonimo di CREATE DATABASE a partire da MySQL 5.0.2.


tutto questo risale a uno standard ANSI per SQL a metà degli anni '80.

Quello standard aveva un comando "CREATE SCHEMA" e serviva per introdurre più spazi dei nomi per i nomi di tabelle e viste. Tutte le tabelle e le viste sono state create all'interno di uno "schema". Non so se quella versione definisse un accesso cross-schema a tabelle e viste, ma presumo che lo abbia fatto. AFAIR, nessun prodotto (almeno allora) lo implementò davvero, l'intero concetto era più teoria che pratica.

OTOH, ISTR questa versione dello standard non aveva il concetto di un comando "utente" o "CREATE USER", quindi c'erano prodotti che utilizzavano il concetto di "utente" (che quindi aveva il suo spazio nome per le tabelle e viste) per implementare il loro equivalente di "schema".

Questa è un'area in cui i sistemi differiscono.

Per quanto riguarda l'amministrazione, questo non dovrebbe importare troppo, perché qui hai comunque delle differenze.

Per quanto riguarda il codice dell'applicazione, devi preoccuparti "solo" dei casi in cui un'applicazione accede alle tabelle da più spazi dei nomi. Per quanto ne so, tutti i sistemi supportano una sintassi ".", E per questo non dovrebbe importare se lo spazio dei nomi è quello di un utente, uno "schema" o un "database".



2
Sarebbe corretto fornire un riferimento alla fonte originale, da cui è stata tratta questa risposta: lists.mysql.com/mysql/211647
informatik01

@ informatik01 A meno che Adinochestva non sia un poster originale.
FanaticD

SQL Server ha implementato SCHEMA come gruppo di tabelle / tipi / .. all'interno di un database
Gudgip

7

A rigor di termini, la differenza tra Database e Schema è inesistente in MySql.

Tuttavia, questo non è il caso di altri motori di database come SQL Server. In SQL server :,

Ogni tabella appartiene a un raggruppamento di oggetti nel database denominato schema del database . È un contenitore o uno spazio dei nomi ( query in Microsoft SQL Server 2012 )

Per impostazione predefinita, tutte le tabelle in SQL Server appartengono a uno schema predefinito denominato dbo . Quando esegui una query su una tabella che non è stata assegnata a uno schema particolare, puoi fare qualcosa come:

SELECT *
FROM your_table

che è equivalente a:

SELECT *
FROM dbo.your_table

Ora, il server SQL consente la creazione di schemi diversi, che ti dà la possibilità di raggruppare tabelle che condividono uno scopo simile. Ciò aiuta a organizzare il database.

Ad esempio, puoi creare uno schema chiamato vendite , con tabelle come fatture , ordini di credito (e qualsiasi altro relativo alle vendite) e un altro schema chiamato ricerca , con tabelle come paesi , valute , tipi di abbonamento (e qualsiasi altra tabella utilizzata come aspetto sul tavolo).

Le tabelle allocate a un dominio specifico vengono visualizzate in SQL Server Studio Manager con il nome dello schema anteposto al nome della tabella (esattamente lo stesso delle tabelle che appartengono allo schema dbo predefinito ).

Esistono schemi speciali in SQL Server. Per citare lo stesso libro:

Esistono diversi schemi di database incorporati e non possono essere eliminati o modificati:

1) dbo , lo schema predefinito.

2) guest contiene oggetti disponibili per un utente guest ("utente guest" è un ruolo speciale nel gergo di SQL Server, con alcune autorizzazioni predefinite e altamente limitate). Utilizzato raramente.

3) INFORMATION_SCHEMA , utilizzato dalle viste dello schema delle informazioni

4) sys , riservato esclusivamente all'uso interno di SQL Server

Gli schemi non sono solo per il raggruppamento. In realtà è possibile assegnare autorizzazioni diverse per ogni schema a utenti diversi, come descritto in MSDN .

In questo modo, la ricerca dello schema sopra menzionata potrebbe essere resa disponibile a qualsiasi utente standard nel database (ad esempio SELECTsolo i permessi), mentre una tabella chiamata Supplierbankaccountdetails può essere allocata in uno schema diverso chiamato financial , e per dare accesso solo agli utenti in il gruppo accounts(solo un esempio, hai un'idea).

Infine, e citando di nuovo lo stesso libro:

Non è lo stesso schema di database e schema di tabella . Il primo è lo spazio dei nomi di una tabella, mentre il secondo si riferisce alla definizione della tabella



5

Il database è una raccolta di schemi e lo schema è una raccolta di tabelle. Ma in MySQL lo usano allo stesso modo.


1

Quindi, non c'è differenza tra il "database" MySQL e lo "schema" MySQL: questi sono due nomi per la stessa cosa: uno spazio dei nomi per tabelle e altri oggetti DB.

Per le persone con un background Oracle: il "database" MySQL alias "schema" MySQL corrisponde allo schema Oracle. La differenza tra i comandi MySQL e Oracle CREATE SCHEMA è che in Oracle il comando CREATE SCHEMA non crea effettivamente uno schema, ma piuttosto lo popola con tabelle e viste. E il comando CREATE DATABASE di Oracle fa una cosa molto diversa dalla sua controparte MySQL.

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.