时间:2021-07-01 10:21:17 帮助过:31人阅读
Create a database CREATE DATABASE database_name [ CONTAINMENT = { NONE | PARTIAL } ] [ ON [ PRIMARY ] <filespec> [ ,...n ] [ , <filegroup> [ ,...n ] ] [ LOG ON <filespec> [ ,...n ] ] ] [ COLLATE collation_name ] [ WITH <option> [,...n ] ] [;] <option> ::= { FILESTREAM ( <filestream_option> [,...n ] ) | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias } | DEFAULT_LANGUAGE = { lcid | language_name | language_alias } | NESTED_TRIGGERS = { OFF | ON } | TRANSFORM_NOISE_WORDS = { OFF | ON} | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> | DB_CHAINING { OFF | ON } | TRUSTWORTHY { OFF | ON } } <filestream_option> ::= { NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL } | DIRECTORY_NAME = ‘directory_name‘ } <filespec> ::= { ( NAME = logical_file_name , FILENAME = { ‘os_file_name‘ | ‘filestream_path‘ } [ , SIZE = size [ KB | MB | GB | TB ] ] [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ] ) } <filegroup> ::= { FILEGROUP filegroup name [ [ CONTAINS FILESTREAM ] [ DEFAULT ] | CONTAINS MEMORY_OPTIMIZED_DATA ] <filespec> [ ,...n ] } <service_broker_option> ::= { ENABLE_BROKER | NEW_BROKER | ERROR_BROKER_CONVERSATIONS }
具体参数请参考:https://msdn.microsoft.com/zh-cn/library/ms176061(v=sql.120).aspx
现在我们通过权限管理系统创建数据库,在创建界面输入数据库参数,如下图所示:
点击“创建”按钮后, 服务器自动生成数据库创建SQL语句 ,如下:
USE master; CREATE DATABASE HeaviDb ON( Name = HeaviDb, FILENAME = ‘D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\HeaviDb.mdf‘, SIZE = 10, FILEGROWTH = 2MB, MAXSIZE = 500)
在创建数据库时,我们一般要把当前数据库切换到master数据库。上面的语句只指定了FILENAME,而没有指定log的FILENAME,这种情况SQL SERVER会自动在FILENAME同目录下为我们自动创建HeaviDb_log.ldf文件。SIZE设置为10,这里没有单位,默认单位为MB,也可以显示指定KB、MB、GB、TB后缀,例如SIZE = 10MB或者SIZE = 10GB。FILEGROWTH设置为2MB,即数据库按照2MB自增长,另外我们也可以按照百分比增长,例如FILEGROWTH = 10%。MAXSIZE设置为500,默认单位也是MB。如果我们不限制数据库文件大小,可直接用UNLIMITED代替MAXSIZE = 500。执行以上SQL语句,我们就能在数据库中查看到该数据库了。
修改数据库
这一节讨论怎样修改数据库,但这里会涉及到比较核心的知识点。在权限管理系统中,选中数据库列表某一列,点击“修改”按钮,弹出修改数据库界面。但这里有一个问题,在数据库列表中只包含了 数据库名称、文件以及数据库所有者信息。而我们修改界面展示了数据库初始大小以及自增长值。这些信息在列表中是没有的。但通过数据库查询我们知道这些信息保存在sys.master_files中。执行查询语句:
select mf.database_id as DbId, mf.name as Name, mf.size as InitSize, mf.max_size as MaxSize, mf.growth as Growth, mf.is_percent_growth as IsPercentGrowth from sys.master_files mf where mf.type = 0查询结果如下:
查询的数据结果我们不能直接使用,数据库大小InitSize、数据库最大值MaxSize、自增长值Growth这些数据不能直接展示在界面,那这些数据到底是什么意思呢?先看看msdn对这几个字段的描述:
分析几个字段:
size int 当前文件大小(以 8 KB 为单位的页数)。 对于数据库快照来说,size 表示该快照可以一直用于文件的最大空间。 max_size int 最大文件大小(以 8 KB 为单位的页数):
0 = 不允许增长。
-1 = 文件将一直增长到磁盘充满为止。
268435456 = 日志文件将增长到最大大小 2 TB。
growth int 0 = 文件大小固定,不会增长。
>0 = 文件将自动增长。
如果 is_percent_growth = 0,则以若干个 8 KB 页为增量递增,舍入为 64 KB
如果 is_percent_growth = 1,增量将用整数百分比表示。
is_percent_growth bit 1 = 文件的增长以百分比表示。
0 = 以页数为单位表示绝对增长大小。
1.size:没有直接存储文件大小,而是存储文件的总页数,每一页大小为8KB。以MB为size单位,size的实际值则应该为:(size * 8 /1024)MB;
2. max_size:有三种值,一是等于-1,二是等于0,另一种是大于0 。等于-1表示UNLIMITED(没有限制)。等于0表示不允许增长。大于0时和size相似,以MB为max_size单位,max_size实际值则应该为:(max_size * 8 /1024)MB;
3.is_percent_growth:值等于0或者1,等于1表示按百分比自增长。等于0表示按固定值增长;
4.growth:等于0表示固定大小,不会自增增长。大于0时依赖于is_percent_growth的值。如果is_percent_growth=0,growth按固定数字自增长。以MB为单位,growth实际值为(growth * 8 /1024)MB。如果is_percent_growth=1,则growth的实际值为growth%;
以上字段了解清楚后,我们的数据库文件参数就能显示出来了。例如,修改刚才创建的HeaviDb数据库,弹出修改界面如下:
修改初始值为20,增长方式为pecent并且值为10,文件最大值没有限制。这里需要说明几点:
1.修改的初始值不能小于当前数据库文件的实际大小;
2.如果文件最大值限制为固定值,那么这个固定值不能小于当前数据库大小以及修改后的数据库大小(初始值);
修改参数后界面如下:
点击“保存”按钮,后台生成的SQL语句如下:
USE master; ALTER DATABASE HeaviDb MODIFY FILE (Name = HeaviDb,SIZE = 20,FILEGROWTH = 20,MAXSIZE = UNLIMITED)
修改数据库使用DDL的ALTER DATABASE语句,修改文件使用MODIFY FILE语句。完整的数据库修改SQL请查看:
https://msdn.microsoft.com/zh-cn/library/ms174269(v=sql.120).aspx。
删除数据库
数据库的删除语句比较简单,SQL与语句如下:
USE master; DROP DATABASE HeaviDb
删除数据库必须知道:系统数据库是不能删除的;不能删除正在使用的数据库。
总结
本篇随笔主要介绍了登录账号的查询、创建、修改、删除,以及数据库的查询、创建、修改、删除所涉及的系统视图以及DDL语句。通过这篇内容我们能够比较清楚的了解登录账号以及数据库在SQL SERVER中的存储元数据结构。本篇的内容都是一些基础知识,但同时也是比较重要的基础知识。下一篇将会详细分析数据库中登录账号和数据库的权限设置。
Sql Server来龙去脉系列 必须知道的权限控制基础篇
标签:库文件 off 元数据 read_only [1] 在线 基础 语法 数据库管理