web-dev-qa-db-fra.com

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

J'ai une petite question, pourquoi dois-je utiliser use master; pour créer une base de données? Voici le 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 ) ;
12
S Nell

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 Sales et que vous disposez déjà d'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 master spécifiquement (ou du moins pas un - spécifique base de données), 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 commande USE 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, et --- blessé pour toujours exécuter les commandes au niveau du serveur à partir de cette base de données.

22
Aaron Bertrand

Je crois que ce n'est pas une exigence que vous devez utiliser la base de données master 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 master et c'est une base de données système qui sera toujours là, peu importe donc le script n'échoue pas!

17
Biju jose

Je crois que nous, il y a très très longtemps, avions être en 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).

4
Tibor Karaszi