Diferença entre esquema / banco de dados no MySQL

290

Existe uma diferença entre um esquema e um banco de dados no MySQL? No SQL Server, um banco de dados é um contêiner de nível superior em relação a um esquema.

Eu li isso Create Schemae Create Databasefaço essencialmente a mesma coisa no MySQL, o que me leva a acreditar que esquemas e bancos de dados são palavras diferentes para os mesmos objetos.

Lloyd Banks
fonte
Na verdade, eu diria que schemaé melhor do que database, como MySQL é uma espécie de banco de dados, e que contém vários database, e às vezes você useum database, o que faz com que muitas pesquisas para alvo falta.
theaws.blog

Respostas:

335

Conforme definido no Glossário MySQL :

No MySQL, fisicamente, um esquema é sinônimo de um banco de dados . Você pode substituir a palavra-chave em SCHEMAvez da DATABASEsintaxe SQL do MySQL, por exemplo, usando em CREATE SCHEMAvez de CREATE DATABASE.

Alguns outros produtos de banco de dados fazem uma distinção. Por exemplo, no produto Oracle Database, um esquema representa apenas uma parte de um banco de dados: as tabelas e outros objetos pertencentes a um único usuário.

eggyal
fonte
74
Eu acho que "alguns outros produtos de banco de dados" são realmente um eufemismo para praticamente todos os outros bancos de dados (talvez exceto SQLite, mas isso é compreensível).
Stefan Steiger
5
Tornar o esquema sinônimo de banco de dados é interessante - eu sempre o associei a objetos de usuário. E uma menção amigável ao SQLServer que separava o conceito de usuário / esquema, permitindo uma grande quantidade de flexibilidade e algumas maneiras interessantes de fazer consultas dinâmicas.
precisa
O que é irritante na definição de "esquema" como um agrupamento de objetos de banco de dados é que ele sobrecarrega o significado antigo da palavra, por exemplo, en.wikipedia.org/wiki/Database_schema .
Mark E. Haase
1
@mehaase ambos são o antigo significado da palavra. A Oracle possuía esquemas antes mesmo do SQL3 (1999), embora os tratasse como outros bancos de dados processaria bancos de dados completos. De fato, a Oracle chama de "banco de dados" o que outros chamam de servidor ou instância de servidor - binários diferentes, executáveis ​​diferentes, portas diferentes.
Panagiotis Kanavos
61

Depende do servidor de banco de dados. MySQLnão se importa, é basicamente a mesma coisa.

Oracle,, DB2e outras soluções de banco de dados de nível corporativo fazem uma distinção. Normalmente, um esquema é uma coleção de tabelas e um Banco de Dados é uma coleção de esquemas.

user2631022
fonte
6
Mesmo Microsoft SQL Server tem distinção muito semelhante Oraclee DB2para este caso.
RBT
2
No MySQL, "banco de dados" e "esquema" não são basicamente a mesma coisa; é exatamente a mesma coisa (por exemplo, create databasee create schemasão sinônimos). No Oracle, o esquema é sinônimo de usuário (talvez com mais precisão, o esquema é uma lista de todos os objetos criados sob um usuário). MSSQL distingue todos os três (e, como resultado, ao acessar uma tabela de um banco de dados diferente, o nome deve ser qualificado por ambos banco de dados e do esquema, por exemplo database1.dbo.table2)
Mike Rosoft
17

Referindo-se à documentação do MySql ,

CREATE DATABASE cria um banco de dados com o nome fornecido. Para usar esta instrução, você precisa do privilégio CREATE para o banco de dados. CREATE SCHEMA é sinônimo de CREATE DATABASE a partir do MySQL 5.0.2.

Akash KC
fonte
7

O PostgreSQL suporta esquemas, que são um subconjunto de um banco de dados: https://www.postgresql.org/docs/current/static/ddl-schemas.html

Um banco de dados contém um ou mais esquemas nomeados, que por sua vez contêm tabelas. Os esquemas também contêm outros tipos de objetos nomeados, incluindo tipos de dados, funções e operadores. O mesmo nome de objeto pode ser usado em esquemas diferentes sem conflito; por exemplo, o schema1 e o myschema podem conter tabelas denominadas mytable. Diferentemente dos bancos de dados, os esquemas não são rigidamente separados: um usuário pode acessar objetos em qualquer esquema do banco de dados ao qual está conectado, se tiver privilégios para fazê-lo.

Os esquemas são análogos aos diretórios no nível do sistema operacional, exceto que os esquemas não podem ser aninhados.

Na minha humilde opinião, o MySQL não é um banco de dados de referência. Você nunca deve citar o MySQL para uma explicação. O MySQL implementa SQL fora do padrão e, às vezes, reivindica recursos que ele não suporta. Por exemplo, no MySQL, o esquema CREATE criará apenas um DATABASE. É usuários verdadeiramente enganadores.

Esse tipo de vocabulário é chamado "MySQLism" pelos DBAs.

Jean-Michel P.
fonte
2
E depois há "esquemas" para adicionar à confusão para iniciantes :)
Zeni
@ Zeni, o que exatamente é um esquema no MySQL? Tudo o que pude encontrar são referências à tabela de esquemas information_schema, mas nenhuma definição concisa sobre o que realmente significa
Alf47
@ Alf47 "schemata" é apenas a forma plural da palavra "schema". "esquemas" também é aceitável, mas não tão chique :)
jobo3208 11/06
6

no esquema do MySQL é sinônimo de banco de dados . É bastante confuso para as pessoas iniciantes que acessam o MySQL e no primeiro dia encontram a palavra esquema , para que não se preocupem, pois ambas são iguais.

Ao iniciar o MySQL pela primeira vez, você precisa criar um banco de dados (como qualquer outro sistema de banco de dados) para trabalhar, para que você possa CRIAR ESQUEMA, que nada mais é que CREATE DATABASE

Em algum outro sistema de banco de dados, o esquema representa uma parte do banco de dados ou uma coleção de Tabelas, e a coleção de esquema é um banco de dados.

Riz
fonte
3

Sim, as pessoas usam esses termos de forma intercambiável em relação ao MySQL. Embora muitas vezes você ouça as pessoas se referirem inadequadamente a todo o servidor de banco de dados como o banco de dados.

Mike Brant
fonte
0

Microsoft SQL Server, por exemplo, Schemas refere-se a um único usuário e é outro nível de um contêiner na ordem em que indica o servidor, banco de dados, esquema, tabelas e objetos.

Por exemplo, quando você pretende atualizar o dbo.table_a e a sintaxe não é totalmente qualificada, como UPDATE table.a, o DBMS não pode decidir usar a tabela pretendida. Essencialmente, por padrão, o DBMS utilizará myuser.table_a

EliD
fonte
Os esquemas pertencem a um único usuário. Por padrão, um usuário criado no banco de dados usa o esquema dbo como esquema padrão. O esquema padrão usado para uma referência de tabela não totalmente qualificada é o que está definido para esse usuário.
precisa
Nas versões mais antigas do SQL Server, a exclusão de um usuário tornaria inutilizável o esquema associado a ele. Atualmente, o mapeamento entre usuário e esquema é menos rigoroso. Além disso, é considerado uma boa prática criar uma única conta falsa para o proprietário do banco de dados e de todos os esquemas.
Jonathan Allen