CREATE DATABASE建库语句详解
原创地址:http://blog.csdn.net/guguda2008/article/details/5716939
一个完整的建库语句是类似这样的:
IF DB_ID('TEST') IS NOT NULL DROP DATABASE TEST
GO
CREATE DATABASE TEST
ON PRIMARY (
NAME=TEST_DAT_MAIN1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN1.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_MAIN2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN2.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_SUB1 DEFAULT (
NAME=TEST_DAT_SUB1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB1.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_SUB2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB2.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_SUB2 (
NAME=TEST_DAT_SUB3
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB3.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_FILESTREAM1 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM1
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM1.MDF'
)
,FILEGROUP TEST_DAT_FILESTREAM2 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM2
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM2.MDF'
)
LOG ON (
NAME=TEST_LOG1
,FILENAME='D:/SQL2008DATAS/TEST_LOG1.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
),(
NAME=TEST_LOG2
,FILENAME='D:/SQL2008DATAS/TEST_LOG2.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
)
COLLATE CHINESE_PRC_CI_AS
WITH
DB_CHAINING OFF
,TRUSTWORTHY OFF
长了一点,不过没关系,我分开一点一点说
1.
IF DB_ID('TEST') IS NOT NULL DROP DATABASE TEST
GO
这个是判断如果有名为TEST的数据库就删除,不在本文讨论范围内,知道啥意思就好。
2.
CREATE DATABASE TEST
这就是刚才说的最简单的建库语句
CREATE DATABASE是关键字,表示要建立一个数据库,这两句是不能改的
TEST是库名,基本上是随便打的,只要符合一些规范,别打乱七八糟的字符行了,比如火星文什么的。具体规范可以看这里
http://msdn.microsoft.com/zh-cn/library/ms175874.aspx
3.
ON PRIMARY (
NAME=TEST_DAT_MAIN1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN1.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_MAIN2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN2.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
这里详细说一下
MSSQL是通过文件来存放数据的,在管理这些文件的时候可以把若干个文件分到一组。一个数据库至少要有一个文件和一个文件组,其中至少有一个主文件组,主文件组中有且只有一个主文件,如果用户没有指定主文件组则会通过一些默认设置来自动创建。比如上面那个最简单的CREATE DTABASE TEST,系统会自动创建一个RPIMARY文件组,其中有一个TEST.MDF文件。
ON PRIMARY的意思是就是指定主文件组中包含的文件。上面这段语句为主文件组PRIMARY指定了两个文件,第一个文件就是数据库的主文件,第二个文件则是同属PRIMARY文件组的次要数据文件。在括号中的就是它的属性。如果要手工指定属性,NAME和FILENAME是必须写的,后面三个可以不写。不写的话就会跟MODEL数据库的设置一样。
NAME是文件的逻辑名称,在数据库管理时作为文件的标识使用,文件名在数据库中不能重名。
FILENAME是文件的物理名称,也就是它在操作系统中的存放路径。MSDN中的原话是“文件必须驻留在下列一种设备中:安装 SQL Server 的本地服务器、存储区域网络 [SAN] 或基于 iSCSI 的网络。”。后面两个我都没用过,留待以后学会了再补充,前一个就是WINDOWS中的路径了。注意如果文件所在的文件夹不存在会报错,所以要提前建好文件夹。
SIZE是文件的初始大小,主文件最小2MB,次要文件最小512KB。如果SIZE后面只写数字如2则默认为2MB。
MAXSIZE指定文件的最大大小,如果数据库中的所有文件都达到最大大小或者磁盘没空间了都会导致无法插入或由小到大更新。MAXSIZE中可以写数字,和SIZE一样,也可以写UNLIMITED指定不限制最大大小。
FILEGROWTH指定文件增长方式,可以和上面一样写数字,也可以写百分比,不过建议写数字,因为数据库大了以后按百分比增长会慢。
一个文件组由一段定义文字和由括号包起来的若干个文件组成,多个文件用逗号分隔,每个文件由一对括号和若干个由逗号分隔的属性组成,语法就是这样了,后面的语句和这个是大同小异的。
4.
,FILEGROUP TEST_DAT_SUB1 DEFAULT (
NAME=TEST_DAT_SUB1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB1.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_SUB2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB2.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
除了第一行,剩下的都和上边一样。只说一下第一行。
FILEGROUP是关键字,指定用户文件组,后面跟着的TEST_DAT_SUB1就是名字,DEFAULT是指定此文件组为默认文件组。默认文件组的意思就是如果创建用户数据时如果没有明确指定,都会放到这个文件组里。
下面的语句就是为TEST_DAT_SUB1文件组分配两个文件。不多说了。我也都是COPY一下一改名就完了。
5
,FILEGROUP TEST_DAT_SUB2 (
NAME=TEST_DAT_SUB3
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB3.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
没有需要说明的地方,都能看懂了吧。
6
,FILEGROUP TEST_DAT_FILESTREAM1 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM1
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM1.MDF'
)
,FILEGROUP TEST_DAT_FILESTREAM2 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM2
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM2.MDF'
)
注意文件组名后的CONTAINS FILESTREAM关键字,这个是2008新加的数据流功能,这里不讨论先。反正加上这个关键字就是指定文件组在文件系统中存储 FILESTREAM 二进制大型对象 (BLOB)。这种文件组中的文件只能指定NAME和FILENAME两个属性,其中FILENAME中的最后一个文件夹不能在系统中存在,比如D:/ABC/123/XXX.MDF中,必须在D盘有一个ABC文件夹,但其中不可以有名为123的文件夹。
另外一个FILESTREAM 文件组里只能有一个文件,但可以指定多个FILESTREAM 文件组。
7
LOG ON (
NAME=TEST_LOG1
,FILENAME='D:/SQL2008DATAS/TEST_LOG1.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
),(
NAME=TEST_LOG2
,FILENAME='D:/SQL2008DATAS/TEST_LOG2.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
)
LOG ON就是指定数据库日志文件,用来对数据库的操作日志,但比较恶心的是MS不提供查看日志文件的工具,想通过日志文件了解历史记录要用第三方工具。如果没有指定日志文件,会默认创建一个与数据库同名的LDF文件,存放在系统数据库同一目录下。建议日志文件和数据文件分两个硬盘存放。
8
COLLATE CHINESE_PRC_CI_AS
指定数据库的排序规则,如果不写就按数据库默认的来。排序规则我也搞不大清楚,跟系统也有关,MS的说明太简单了。学好了以后再另写。
9
WITH
DB_CHAINING OFF
,TRUSTWORTHY OFF
控制外部与数据库之间的双向访问,DB_CHAINING指定数据库可不可以为跨数据库所有权链的源或目标;TRUSTWORTHY指定模拟上下文中的数据库模块能不能访问数据库以外的资源。可以不写,会都默认为OFF,对这东西感兴趣的可以自己去翻翻资料。这个我从来没用过,等学会了以后再补充到这篇博客里。
附加数据库和数据库快照的语法和这个差不多,等着另开一篇写,如果写太多看完后边的就会忘了前边的了。
以上就是建库语句的全部组成,除了FILESTREAM以外都是2005和2008通用的。本文是写给对数据库不太了解的新手的,所以如果你是新手而且有解释看不懂,请给我留言。如果你发现文中有说的不对的地方也请给我留言。
CREATE DATABASE建库语句详解的更多相关文章
- MySQL的数据类型和建库策略详解
无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构.充分利用空间是十分必要的.这就要求我们对数据库系统的常用数据类型有充分的认识.下面我就将我的一点心得写出来跟大家分享. 一.数字 ...
- 【转】MySQL用户管理及SQL语句详解
[转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...
- 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...
- mysql基础篇 - SELECT 语句详解
基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...
- T-SQL_select语句详解
select语句执行的过程: 先看查询内容 ==>where条件 ==>[分组条件] ==>[分组搜索条件] ==>内容输出 ==>[是否排序] SQL中SELECT语句 ...
- SQL DELETE 语句详解
SQL DELETE 语句详解 DELETE 语句 DELETE 语句用于删除表中的行. 语法 DELETE FROM 表名称 WHERE 列名称 = 值 Person: LastName Fir ...
- SQL Update 语句详解
SQL Update 语句详解 Update 语句 Update 语句用于修改表中的数据. 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Person: L ...
- “全栈2019”Java异常第二十二章:try-with-resources语句详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- MySQL之SELECT 语句详解
本文参考实验楼的SELECT 语句详解结合自己操作部分而写成. 注意:大多数系统中,SQL语句都是不区分大小写的,但是出于严谨和便于区分保留字和变量名,在书写的时,保留字应大写,而变量名应小写.所谓的 ...
随机推荐
- java中的io系统详解(转)
Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...
- $(document).ready(function(){})和window.onload=function(){}的比较
这两个函数想必每个前端开发者都不会很陌生,但是很了解用法的人估计就比较少了,博主也是最近才开始注意到这两个函数的区别. 首先$(document).ready(function(){})等同于$(). ...
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
1.首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址,然后继续下面操作. 2.拿到外网IP地址,进行tomcat的server.xml文件的配置. ...
- Codeforces Round #277(Div 2) A、B、C、D、E题解
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud A. Calculating Function 水题,判个奇偶即可 #includ ...
- MySql移植到嵌入式Linux平台
最近在做考勤机系统,硬件采用的cortex-A8,哈哈,其实是有点浪费的,2410就可以的.所以就要考虑到考勤数据的存储问题,本来是打算用sqlite数据库存储的,可是后来发现,这个数据库只是一个本地 ...
- java直接打开pdf,doc,xls
jsp页面: <a href=\'#\' onclick=onLine(\''+urls[i]+'\') >在线打开</a> html页面超链接单击打开online函数 var ...
- 梯田(dfs)
梯田 Time Limit: 2000 ms Memory Limit: 256 MBTotal Submission: 26 Submission Accepted: 5 Descrip ...
- Method Resolution Order – Python类的方法解析顺序
在支持多重继承的编程语言中,查找方法具体来自那个类时的基类搜索顺序通常被称为方法解析顺序(Method Resolution Order),简称MRO.(Python中查找其它属性也遵循同一规则.)对 ...
- jquery.fn.extend与jquery.extend(转)
jQuery为开发插件提拱了两个方法,分别是: JavaScript代码 jQuery.fn.extend(object); jQuery.extend(object); jQuery.extend( ...
- 十一、外观(Facade)模式--结构模式(Structural Pattern)
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式.门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行. 门面模式提供一个高层次 ...