为什么要使用master创建数据库?


12

我有一个简短的问题,为什么要使用我use master;来创建数据库?这是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 ) ;

Answers:


22

在这种非常特殊的情况下,这绝对不是必需条件,但在许多其他情况下,则是必需条件。如果您要创建一个名为的数据库Sales,并且女士们有一个名为的数据库Sales,则需要先更改数据库上下文:

  • 用替换恢复;要么,
  • 删除当前数据库,然后:
    • 从头开始创建;要么,
    • 创建附加。

除了数据库创建之外,还有许多其他场景,这些场景还要求(a)不在当前数据库的上下文中,或者(b)在master特定(或至少不是特定数据库)的上下文中,并且许多在创建数据库期间或周围,您可能正在做的这些事情:

  • 将数据库设置为其他状态,例如 single_user
  • 当脚本有USE命令但该用户数据库可能处于脱机状态或无法访问时,防止错误
  • 授予服务器级权限,例如 CREATE DATABASE
  • 授予服务器级角色成员资格
  • 将模块标记为系统对象(sp_MS_marksystemobject)或启动过程
  • 某些类型的证书,服务器审核和可用性组操作

可能还有很多其他的东西。USE master;并不总是必要的,但有时,它不会伤害总是从该数据库中执行服务器级的命令。


17

我认为您不必使用master数据库来创建数据库。由于create database命令应在数据库上下文中运行,因此文档始终使用默认数据库,master它是系统数据库,无论如何都将始终存在,因此脚本不会失败!


4

我相信我们,一个非常非常很久以前,执行CREATE DATABASE命令时,将在主。我太懒了,无法发布大约20年的旧版本来进行验证。因此,很可能结合了这一点,因此成为大师“感觉很自然”。就像您要创建一个文件夹(假设只有一个级别的文件夹)一样,您可能会觉得“最好”先说CD \(将根目录与master数据库进行比较)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.