Pourquoi utiliser master pour créer une base de données?

12

J'ai une courte question, pourquoi dois-je utiliser use master;pour créer une base de données? Voici l' exemple de la documentation Microsoft

USE master ;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\...\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,  
    FILENAME = 'C:\Program Files\...\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
S Nell
la source

Réponses:

22

Ce n'est absolument pas une exigence dans ce cas très spécifique, mais c'est une exigence dans de nombreux autres scénarios. Si vous créez une base de données appelée Saleset que vous avez déjà une base de données appelée Sales, vous devrez modifier le contexte de votre base de données avant de:

  • Restaurer avec remplacer; ou,
  • Supprimez la base de données actuelle, puis:
    • Créez à partir de zéro; ou,
    • Créez pour attacher.

Il existe de nombreux autres scénarios en dehors de la création de base de données qui nécessitent également (a) de ne pas être dans le contexte de la base de données actuelle, ou (b) d'être dans le contexte de masterspécifiquement (ou du moins pas une base de données spécifique ), et beaucoup de ces choses que vous pouvez faire pendant ou autour de la création de bases de données:

  • Définition d'une base de données dans un état différent, comme single_user
  • Prévention des erreurs lorsqu'un script a une USEcommande mais que la base de données utilisateur peut être hors ligne ou autrement inaccessible
  • Octroi d'autorisations au niveau du serveur comme CREATE DATABASE
  • Octroi de l'appartenance à un rôle au niveau du serveur
  • Marquage d'un module comme objet système ( sp_MS_marksystemobject) ou comme procédure de démarrage
  • Certains types d'opérations de certificat, d'audit de serveur et de groupe de disponibilité

Probablement une foule d'autres choses. USE master;n'est pas toujours nécessaire, mais parfois c'est le cas, et cela ne fait pas de mal d'exécuter toujours des commandes au niveau du serveur à partir de cette base de données.

Aaron Bertrand
la source
17

Je crois que ce n'est pas une exigence que vous devez utiliser la masterbase de données pour créer une base de données. Étant donné que la commande create database doit être exécutée dans un contexte de base de données, la documentation utilise toujours une base de données par défaut qui est masteret c'est une base de données système qui sera toujours là, peu importe donc le script n'échoue pas!

Biju jose
la source
4

Je crois que nous, il y a très très longtemps, devions être maître lors de l'exécution de la commande CREATE DATABASE. Je suis trop paresseux pour lancer une version vieille de 20 ans pour vérifier. Donc probablement une combinaison de cela et qu'il "semble naturel" d'être maître. Comme si vous voulez créer un dossier (imaginez qu'il n'y a qu'un seul niveau de dossiers), vous vous sentez probablement "mieux" de dire CD \ first (en comparant la racine ici avec la base de données master).

Tibor Karaszi
la source