MySQL 'create schema' et 'create database' - Y a-t-il une différence

104

En prenant un pic dans la information_schemabase de données et en atteignant les métadonnées pour l'un de mes projets familiers, j'ai du mal à comprendre les différences (le cas échéant) entre la create schemacommande et la create databasecommande pour MySQL.

Y a-t-il des différences? Sinon, est-ce un modèle de comportement plutôt typique pour les bases de données relationnelles (j'ai entendu dire que pour d'autres bases de données, comme 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!

Bob
la source

Réponses:

140

La documentation de MySQL dit :

CREATE DATABASE crée une base de données avec le nom donné. Pour utiliser cette instruction, vous avez besoin du privilège CREATE pour la base de données. CREATE SCHEMA est un synonyme de CREATE DATABASE à partir de MySQL 5.0.2.

Donc, il semblerait normal que ces deux instructions fassent de même.

Pascal MARTIN
la source
1
Excellent! J'ai supposé que le schéma faisait partie d'une instance de base de données. Merci beaucoup!!
asgs
27

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 avait une commande "CREATE SCHEMA", et elle servait à introduire plusieurs espaces de nom 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 a défini un accès croisé aux tables et aux vues, mais je suppose que c'est le cas. AFAIR, aucun produit (du moins à l'époque) ne l'a vraiment mis en œuvre, tout ce concept était plus de la théorie que de la pratique.

OTOH, ISTR cette version de la norme n'avait pas le concept d'un "utilisateur" ou une commande "CREATE USER", il y avait donc des produits qui utilisaient le concept d'un "utilisateur" (qui avait alors son propre espace de nom pour les tables et views) pour implémenter leur équivalent de "schema".

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 quand même des différences.

En ce qui concerne le code de l'application, vous n'avez «que» à vous soucier des cas où une application accède aux tables à partir de plusieurs espaces de noms. AFAIK, tous les systèmes supportent une syntaxe ".", Et pour cela peu importe que l'espace de nom soit celui d'un utilisateur, un "schéma" ou une "base de données".

Sadegh
la source
@DerMike Je semble me souvenir, internetslang.com/ISTR-meaning-definition.asp
reevesy
2
Il serait correct de donner une référence à la source originale, d'où cette réponse a été tirée: lists.mysql.com/mysql/211647
informatik01
@ informatik01 Sauf si Adinochestva est une affiche originale.
FanaticD
SQL Server a implémenté SCHEMA en tant que groupe de tables / types / .. dans une base de données
Gudgip
7

À proprement parler, la différence entre Database et Schema n'existe pas 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 dans 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 été allouée à aucun schéma particulier, vous pouvez faire quelque chose comme:

SELECT *
FROM your_table

ce qui équivaut à:

SELECT *
FROM dbo.your_table

Désormais, le serveur SQL permet la création de schémas différents, ce qui vous donne la possibilité 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é ventes , avec des tables telles que les factures , les commandes de crédit (et tout autre schéma lié aux ventes), et un autre schéma appelé lookup , avec des tables telles que les pays , les devises , les types d'abonnement (et toute autre table utilisée comme look table).

Les tables allouées à un domaine spécifique sont affichées dans SQL Server Studio Manager avec le nom du schéma ajouté au 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 le jargon de SQL Server, avec des autorisations par défaut et très restreintes). 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 servent pas uniquement au regroupement. Il est en fait possible de donner des autorisations différentes pour chaque schéma à différents utilisateurs, comme décrit MSDN .

En procédant de cette manière, la recherche de schéma mentionnée ci-dessus pourrait être mise à la disposition de n'importe quel utilisateur standard de la base de données (par exemple, SELECTautorisations uniquement), alors qu'une table appelée supplierbankaccountdetails peut être allouée dans un schéma différent appelé financier , et pour ne donner accès qu'aux utilisateurs de le groupe accounts(juste un exemple, vous voyez l'idée).

Enfin, et en 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 second fait référence à la définition de la table

Nicolas
la source
5

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

Arun Raja
la source
1

Il n'y a donc aucune différence entre la "base de données" MySQL et le "schéma" MySQL: ce sont deux noms pour la même chose - un espace de noms pour les tables et autres objets DB.

Pour les personnes ayant une formation Oracle: MySQL "base de données" aka MySQL "schéma" correspond au schéma Oracle. La différence entre les commandes MySQL et Oracle CREATE SCHEMA est que dans Oracle, la commande CREATE SCHEMA ne crée pas réellement de 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 son homologue MySQL.

Oleg Khaykin
la source