web-dev-qa-db-fra.com

MySQL 'create schema' et 'create database' - Existe-t-il une différence?

Prendre un pic dans la base de données information_schema et un maximum à metadata pour un de mes projets pour animaux de compagnie, j'ai du mal à comprendre les différences (le cas échéant) entre la commande create schema et la commande create database pour MySQL.

Y a-t-il des différences? Sinon, s'agit-il d'un comportement typique des bases de données relationnelles (j'ai entendu dire que pour d'autres bases de données, telles qu'Oracle, un schéma existe dans une base de données plutôt que d'être au même niveau qu'une base de données).

Merci!

90
Bob

La documentation de MySQL dit

CREATE DATABASE crée une base de données avec le nom donné. Pour utiliser ceci déclaration, vous avez besoin de la CREATE privilège pour la base de données. CRÉER SCHEMA est un synonyme de CREATE DATABASE à partir de MySQL 5.0.2.

Ainsi, il semblerait normal que ces deux instructions fassent la même chose.

124
Pascal MARTIN

La documentation Mysql dit: CREATE SCHEMA est un synonyme de CREATE DATABASE à partir de MySQL 5.0.2.


tout cela remonte à une norme ANSI pour SQL au milieu des années 80.

Cette norme comportait une commande "CREATE SCHEMA" et elle servait à introduire Plusieurs espaces de noms pour les noms de table et de vue. Toutes les tables et vues ont été créées dans un "schéma". Je ne sais pas si cette version définissait Certains accès inter-schémas à des tables et à des vues, mais je suppose qu'elle le faisait . AFAIR, aucun produit (du moins à l'époque) ne l'a réellement mise en œuvre, tout ce projet. le concept était plus théorique que pratique.

OTOH, ISTR cette version de la norme n'avait pas le concept d'un "Utilisateur" ou une commande "CREATE USER", donc il y avait des produits qui utilisaient le concept De. "Utilisateur" (qui avait alors son espace de noms propre pour les tables et les vues ) afin de mettre en œuvre leur équivalent de "schéma".

C'est un domaine où les systèmes diffèrent.

En ce qui concerne l'administration, cela ne devrait pas avoir trop d'importance, car, ici, vous avez de toute façon des différences.

En ce qui concerne le code d’application, vous ne devez vous préoccuper que des cas Où une application accède aux tables à partir de plusieurs espaces de noms. Selon nos informations, tous les systèmes supportent une syntaxe ".", Peu importe si l’espace de nom est un utilisateur .__, un "schéma" ou une "base de données".

27
Sadegh

Strictement parlant, la différence entre Database et Schema est inexistante dans MySql. 

Cependant, ce n'est pas le cas dans d'autres moteurs de base de données tels que SQL Server. Dans le serveur SQL: 

Chaque table appartient à un groupe d'objets de la base de données appelé schéma de base de données. C'est un conteneur ou un espace de noms ( Interrogation de Microsoft SQL Server 2012 )

Par défaut, toutes les tables de SQL Server appartiennent à un schéma par défaut appelé dbo. Lorsque vous interrogez une table qui n'a pas été allouée à un schéma particulier, vous pouvez effectuer les opérations suivantes:

SELECT *
FROM your_table

qui équivaut à:

SELECT *
FROM dbo.your_table

Désormais, SQL Server permet la création de différents schémas, ce qui vous permet de regrouper des tables partageant un objectif similaire. Cela aide à organiser la base de données. 

Par exemple, vous pouvez créer un schéma appelé sales, avec des tables telles que factures, créanciers (et tout autre élément lié aux ventes), et un autre schéma appelé lookup., avec des tables telles que pays, devises, types d'abonnement (et toute autre table utilisée comme table de recherche). 

Les tables allouées à un domaine spécifique sont affichées dans SQL Server Studio Manager avec le nom du schéma ajouté avant le nom de la table (exactement le même que les tables appartenant au schéma dbo par défaut).

Il existe des schémas spéciaux dans SQL Server. Pour citer le même livre: 

Il existe plusieurs schémas de base de données intégrés, et ils ne peuvent pas être supprimés ou modifiés: 

1) dbo, le schéma par défaut.

2) guest contient des objets disponibles pour un utilisateur invité _ ("utilisateur invité" est un rôle spécial dans SQL Server, avec certaines autorisations par défaut et très restrictives). Rarement utilisé.

3) INFORMATION_SCHEMA, utilisé par les vues de schéma d'information

4) sys, réservé à l'usage interne de SQL Server exclusivement

Les schémas ne sont pas seulement pour le groupement. Il est en fait possible de donner différentes autorisations pour chaque schéma à différents utilisateurs, comme décrit MSDN

De cette manière, le schéma lookup mentionné ci-dessus pourrait être mis à la disposition de tout utilisateur standard de la base de données (autorisations SELECT uniquement), alors qu'une table appelée supplierbankaccountdetails pourrait être allouée dans un autre schéma financial, et pour ne donner accès qu'aux utilisateurs du groupe accounts (juste un exemple, vous voyez l'idée).

Enfin, et citant à nouveau le même livre:

Ce n'est pas le même schéma de base de données et schéma de table. Le premier est l’espace de noms d’une table, tandis que le dernier fait référence à la définition de la table

7
Nicolas

CREATE SCHEMA est un synonyme de CREATE DATABASE. Syntaxe CREATE DATABASE

6
Sergey Olontsev

La base de données est un ensemble de schémas et le schéma est un ensemble de tables. Mais dans MySQL, ils l'utilisent de la même manière. 

4
Arun Raja

Donc, il n'y a pas de différence entre "base de données" MySQL et "schéma" MySQL: il s'agit de deux noms identiques, un espace de noms pour les tables et d'autres objets de base de données.

Pour les personnes ayant des antécédents Oracle: MySQL "base de données" aka MySQL "schéma" correspond au schéma Oracle . La différence entre les commandes CREATE SCHEMA de MySQL et Oracle réside dans le fait que dans Oracle La commande CREATE SCHEMA ne crée pas un schéma mais le remplit plutôt avec des tables et des vues. Et la commande CREATE DATABASE d’Oracle fait une chose très différente de sa contrepartie MySQL.

0
Oleg Khaykin