目录
一般安装完SQL SERVER数据库后我们第一件想到的事情就是需要创建一个新的数据库并且如果不需要时候如何删除它。创建/删除数据库的方法在 SQL Sever 中主要有两种,即SSMS图形化以及T-SQL方式。本文我们将详细介绍下这两种方式,所用数据库版本为SQL SERVER 2016。
依次进入“对象资源管理器” -> 已连接的服务器 -> “数据库”,右键点击“数据库”,选择“新建数据库”。

在“新建数据库”界面,默认进入“常规”设置页面,依次设置:

点击“选择页”上的“选项”,这里重点注意下恢复模式(Recovery Model)这块(后续我会单独写SQL SERVER备份恢复的文章,尽情期待)

在该页面主要设置“恢复模式”, 在微软官网介绍了 SQL Server 的恢复模式主要有以下三种模式:
| 恢复模式 | 说明 | 工作丢失的风险 | 能否恢复到时点? |
|---|---|---|---|
| 简单(SIMPLE) | 无日志备份。 自动回收日志空间以减少空间需求,实际上不再需要管理事务日志空间。 有关简单恢复模式下的数据库备份的信息,请参阅完整数据库备份 (SQL Server) 。 简单恢复模式不支持要求事务日志备份的操作。 在简单恢复模式中不能使用以下功能: -日志传送 -AlwaysOn 或数据库镜像 -没有数据丢失的介质恢复 -时点还原 | 最新备份之后的更改不受保护。 在发生灾难时,这些更改必须重做。 | 只能恢复到备份的结尾。 有关详细信息,请参阅完整数据库还原(简单恢复模式)。 有关简单恢复模式的更多深入说明,请参阅由 SQL Server 简单恢复模式 人员提供的 SQL Server 简单恢复模式。 |
| 完整(FULL) | 需要日志备份。 数据文件丢失或损坏不会导致丢失工作。 可以恢复到任意时点(例如应用程序或用户错误之前)。 有关完整恢复模式下的数据库备份的信息,请参阅完整数据库备份 (SQL Server) 和完整数据库还原 (完整恢复模式) 。 | 正常情况下没有。 如果日志尾部损坏,则必须重做自最新日志备份之后所做的更改。 | 如果备份在接近特定的时点完成,则可以恢复到该时点。 有关使用日志备份还原到故障点的信息,请参阅将SQL Server数据库还原到时间点 (完整恢复模式) 。 注意:如果有两个或更多必须在逻辑上保持一致的完整恢复模式数据库,则最好执行特殊步骤,以确保这些数据库的可恢复性。 有关详细信息,请参阅 恢复包含已标记事务的相关数据库。 |
| 大容量日志(BULK-LOGGED) | 需要日志备份。 是完整恢复模式的附加模式,允许执行高性能的大容量复制操作。 通过使用最小方式记录大多数大容量操作,减少日志空间使用量。 有关可以最少记录的操作的信息,请参阅事务日志 (SQL Server) 。 日志备份可能很大,因为日志备份中捕获了最低限度记录的操作。 有关大容量日志恢复模式下的数据库备份的信息,请参阅完整数据库备份 (SQL Server) 和完整数据库还原 (完整恢复模式) 。 | 如果在最新日志备份后发生日志损坏或执行大容量日志记录操作,则必须重做自该上次备份之后所做的更改。 否则不丢失任何工作。 | 可以恢复到任何备份的结尾。 不支持时 |
从以上三种模式的介绍,建议将新建数据库的“恢复模式”设置为“完整”模式。该页面的其他选项如果没有特殊要求设置为默认值即可。点击“确定”按钮即可完成数据库 TestABC 的创建。这时在 SSMS 中就可以看到刚刚创建的数据库了:

再一起了解下如何使用 T-SQL 方式(即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版)来创建数据库:
- use master;
- create database [TestABC_2]
- containment = none
- on primary -- 表示属于 primary 文件组
- (
- name = N'testabc_2', -- 数据库文件的逻辑名称
- filename = N'C:\Program Files\Microsoft SQL Server\MSSQL13.ZYY\MSSQL\DATA\testabc_2.mdf' , --数据库文件的物理路径及名称
- size = 8192kb , -- 数据库文件的初始大小
- maxsize = unlimited, -- 数据库文件增长最大值
- filegrowth = 65536kb -- 数据库文件的增长率
- )
- log on--表示属于日志文件
- (
- name = N'testabc_2_log', --日志文件的逻辑名称
- filename = N'C:\Program Files\Microsoft SQL Server\MSSQL13.ZYY\MSSQL\DATA\testabc_2_log.ldf' , --日志文件的物理路径及名称
- size = 81920kb , --日志文件的初始大小
- maxsize = 2048gb , --日志文件增长最大值
- filegrowth = 10240kb --日志文件的增长率
- );

上面 SQL 脚本同样实现了 TestABC_2数据库的创建。虽然使用 SQL 脚本创建数据库的方式不复杂,但对编写 SQL 的要求有一定的要求。
与创建数据库一样,删除数据库也有两种方式:SSMS 方式和 T-SQL 方式。使用 SSMS 方式删除数据库相对比较简单直观。
首先在“对象资源管理器”中右键点击准备删除的数据库名称“TestABC”,点击“删除”:

在弹出的删除对象窗口中,选中下面的“关闭现有连接”,避免由于个别连接未关闭而删除数据库失败,最后点击“确定”按钮删除“TestABC”数据库:

如果想使用 SQL 语句删除数据库可以使用下面的脚本:
- if exists(select 1 from sysdatabases where name='TestABC_2')
- begin
- drop database TestABC_2 --如果该数据库已经存在,那么就删除它
- end

值得注意的是,上面的 SQL 脚本只具有删除数据库的功能,如果有其他连接没有关闭,执行上面脚本后,数据库将返回删除失败提示:“无法删除数据库‘TestABC_2’,因为该数据库当前正在使用。”
这时就需要保证所有连接关闭后再执行上面的删除脚本。
下面 SQL 提供了关闭所有活动连接并删除数据库的功能:
- use master
- go
-
- declare @db_name sysname
- set @db_name='TestABC_2' --设置要删除的数据库库名
-
- declare @v_sql nvarchar(1000)
- declare csr cursor local for select sr='kill '+cast(spid as varchar)
- from master..sysprocesses
- where dbid=db_id(@db_name) --定义获取所有连接的游标
-
- open csr --打开游标
- fetch next from csr into @v_sql --获取游标数据
- while @@fetch_status=0
- begin
- exec(@v_sql) --执行杀死连接的语句
- fetch next from csr into @v_sql --获取下一条数据
- end
- close csr --关闭游标
- deallocate csr --释放游标
- exec('drop database ['+@db_name+']') --最后删除数据库
注意:
由于上述方法用到游标等较为复杂的SQL对象,所以对SQL不熟悉的朋友可以忽略这个方法,转而使用SSMS图像化比较简洁。