MySQL 'criar esquema' e 'criar banco de dados' - Existe alguma diferença

104

Dando uma olhada no information_schemabanco de dados e nos metadados de um de meus projetos favoritos, estou tendo dificuldade em entender quais (se houver) diferenças existem entre o create schemacomando e o create databasecomando para MySQL.

Existem diferenças? Caso contrário, esse é um padrão de comportamento bastante típico para bancos de dados relacionais (ouvi dizer que, para outros bancos de dados, como Oracle, existe um esquema em um banco de dados, em vez de estar no mesmo nível de um banco de dados).

Obrigado!

Prumo
fonte

Respostas:

140

A documentação do MySQL diz :

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.

Portanto, parece normal que essas duas instruções façam o mesmo.

Pascal MARTIN
fonte
1
Excelente! Presumi que o esquema é parte de uma instância de banco de dados. Muito obrigado !!
asgs de
27

A documentação do Mysql diz: CREATE SCHEMA é um sinônimo para CREATE DATABASE no MySQL 5.0.2.


tudo isso remonta a um padrão ANSI para SQL em meados dos anos 80.

Esse padrão tinha um comando "CREATE SCHEMA" e serviu para introduzir vários espaços de nomes para nomes de tabelas e visualizações. Todas as tabelas e visualizações foram criadas dentro de um "esquema". Não sei se essa versão definiu algum acesso de esquema cruzado a tabelas e visualizações, mas presumo que sim. AFAIR, nenhum produto (pelo menos naquela época) realmente implementava, todo aquele conceito era mais teoria do que prática.

OTOH, ISTR esta versão do padrão não tinha o conceito de um "usuário" ou um comando "CRIAR USUÁRIO", então havia produtos que usavam o conceito de um "usuário" (que então tinha seu próprio espaço de nomes para tabelas e views) para implementar seu equivalente de "esquema".

Esta é uma área em que os sistemas diferem.

No que diz respeito à administração, isso não deve importar muito, porque aqui você tem diferenças de qualquer maneira.

No que diz respeito ao código do aplicativo, você "apenas" precisa se preocupar com os casos em que um aplicativo acessa tabelas a partir de vários namespaces. AFAIK, todos os sistemas suportam uma sintaxe ".", E para isso não importa se o espaço de nomes é de um usuário, um "esquema" ou um "banco de dados".

Sadegh
fonte
@DerMike I Pareça Recall, internetslang.com/ISTR-meaning-definition.asp
reevesy
2
Seria correto dar uma referência à fonte original, de onde esta resposta foi tirada: lists.mysql.com/mysql/211647
informatik01
@ informatik01 A menos que Adinochestva seja um autor original.
FanaticD
SQL Server implementou SCHEMA como um grupo de tabelas / tipos / .. dentro de um banco de dados
Gudgip
7

A rigor, a diferença entre Database e Schema não existe no MySql.

No entanto, esse não é o caso em outros mecanismos de banco de dados, como o SQL Server. No servidor SQL :,

Cada tabela pertence a um agrupamento de objetos no banco de dados denominado esquema do banco de dados . É um contêiner ou namespace ( Querying Microsoft SQL Server 2012 )

Por padrão, todas as tabelas no SQL Server pertencem a um esquema padrão chamado dbo . Ao consultar uma tabela que não foi alocada a nenhum esquema específico, você pode fazer algo como:

SELECT *
FROM your_table

que é equivalente a:

SELECT *
FROM dbo.your_table

Agora, o servidor SQL permite a criação de diferentes esquemas, o que lhe dá a possibilidade de agrupar tabelas que compartilham uma finalidade semelhante. Isso ajuda a organizar o banco de dados.

Por exemplo, você pode criar um esquema chamado vendas , com tabelas como faturas , ordens de crédito (e qualquer outro relacionado com vendas), e outro esquema chamado lookup , com tabelas como países , moedas , tipos de assinatura (e qualquer outra tabela usada como lookup tabela).

As tabelas que são alocadas a um domínio específico são exibidas no SQL Server Studio Manager com o nome do esquema anexado ao nome da tabela (exatamente o mesmo que as tabelas que pertencem ao esquema dbo padrão ).

Existem esquemas especiais no SQL Server. Para citar o mesmo livro:

Existem vários esquemas de banco de dados integrados e não podem ser descartados ou alterados:

1) dbo , o esquema padrão.

2) convidado contém objetos disponíveis para um usuário convidado ("usuário convidado" é uma função especial no jargão do SQL Server, com algumas permissões padrão e altamente restritas). Raramente usado.

3) INFORMATION_SCHEMA , usado pelas Visualizações do Esquema de Informação

4) sys , reservado exclusivamente para uso interno do SQL Server

Os esquemas não são apenas para agrupamento. Na verdade, é possível conceder permissões diferentes para cada esquema a usuários diferentes, conforme descrito no MSDN .

Fazendo isso, a pesquisa de esquema mencionada acima pode ser disponibilizada para qualquer usuário padrão no banco de dados (por exemplo, SELECTapenas permissões), enquanto uma tabela chamada supplybankaccountdetails pode ser alocada em um esquema diferente chamado financeiro , e dar acesso apenas aos usuários em o grupo accounts(apenas um exemplo, essa é a ideia).

Finalmente, e citando o mesmo livro novamente:

Não é o mesmo esquema de banco de dados e esquema de tabela . O primeiro é o namespace de uma tabela, enquanto o último se refere à definição da tabela

Nicolas
fonte
6

CREATE SCHEMA é sinônimo de CREATE DATABASE. Sintaxe CREATE DATABASE

Sergey Olontsev
fonte
5

O banco de dados é uma coleção de esquemas e o esquema é uma coleção de tabelas. Mas no MySQL eles usam da mesma maneira.

Arun Raja
fonte
1

Portanto, não há diferença entre o "banco de dados" do MySQL e o "esquema" do MySQL: esses são dois nomes para a mesma coisa - um namespace para tabelas e outros objetos de banco de dados.

Para pessoas com experiência em Oracle: "banco de dados" MySQL também conhecido como "esquema" MySQL corresponde ao esquema Oracle. A diferença entre os comandos CREATE SCHEMA do MySQL e do Oracle é que no Oracle o comando CREATE SCHEMA não cria realmente um esquema, mas o preenche com tabelas e visualizações. E o comando CREATE DATABASE da Oracle faz uma coisa muito diferente do que sua contraparte do MySQL.

Oleg Khaykin
fonte