CREATE DATABASE建库语句详解

guguda2008 2010-07-05 10:57:31
加精
博客阅读地址

如果您时间有限,或者认为人生的每时每刻都非常宝贵,应该做有意义的事,请跳过前言的废话直接阅读正文

--------------------------------------------------前言 -----------------------------------------------

本来是想写一篇刚入门的菜鸟都能看懂的SELECT语句语法详解的,因为MSDN上写的帮助对我们这种菜鸟来说跟天书没两样。但没写多少就发现有些东西想说清楚必须先写CREATE TABLE的说明,然后就写CREATE TABLE语法详解,又发现里面跟CREATE DATABASE的关系也很大。。。。事实上在写这篇文章之前我也认真考虑过是否要从安装数据库开始写,但实在不想再装一次2008。。。。。所以就假定读者已经成功的装上了数据库并连接上,可以正常运行SQL语句了。如果有时间而且闲的蛋疼的话再写安装说明吧。。。。

总之我的想法就是:尽管我的水平不高,但我仍然可以帮助那些比我还次的人,或者给高手一点启发,一点复习。

因为是第一篇正经写的东西,所以废话比较多,下面开始正文

---------------------------------------------------正文 -----------------------------------------------

http://msdn.microsoft.com/zh-cn/library/ms176061.aspx

如果你能看懂链接里的说明,就可以关掉这篇文章了。

如果你想创建用户数据库,请使用CREATE DATABASE语句

如果你想附加用户数据库,请使用CREATE DATABASE语句

如果你想创建数据库快照,请使用CREATE DATABASE语句

如果你能看懂上面三句话中的第一句,请继续阅读

MSSQL的数据都是放在数据库里的,每个数据库都对应若干个存储于硬盘上的数据文件和若干个日志文件。所有对数据的操作最终都实现在这些文件上。 CREATE DATABASE语句就是用来创建数据库的。

最简单的建库语句就是

CREATE DATABASE 数据库名


输入数据库名就可以建立一个新的数据库,所有设置都使用系统默认,方便,快捷,安全,无毒,但只会这么一句你还是菜鸟。

一个完整的建库语句是类似这样的:

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通用的。本文是写给对数据库不太了解的新手的,所以如果你是新手而且有解释看不懂,请给我留言。如果你发现文中有说的不对的地方也请给我留言。
...全文
4084 113 打赏 收藏 转发到动态 举报
写回复
用AI写文章
113 条回复
切换为时间正序
请发表友善的回复…
发表回复
zczhangchao2003 2012-06-12
  • 打赏
  • 举报
回复
MARK下 明天系统看
t1tan1c 2012-06-12
  • 打赏
  • 举报
回复
观摩下,需要在看,
alwstr 2011-12-26
  • 打赏
  • 举报
回复
感谢楼主的分享。

比起帮助文件,易懂多了
lhqgs0202 2011-11-13
  • 打赏
  • 举报
回复
学习,顺便菜鸟报到
xiaohou_2007 2011-08-23
  • 打赏
  • 举报
回复
习惯了Oracle的,偶然看MSSQL时看到这篇文章,写的确实非常详细。很全面,所以看起来很多。
likeyrain 2010-07-17
  • 打赏
  • 举报
回复
学习啦
funsuzhou 2010-07-16
  • 打赏
  • 举报
回复
不管怎样,楼主热心啊。
请叫我潇洒哥 2010-07-16
  • 打赏
  • 举报
回复
顶鸭子
hjilove 2010-07-16
  • 打赏
  • 举报
回复
学习 学习
zejyu 2010-07-15
  • 打赏
  • 举报
回复
一个很好的学习笔记
xyj052 2010-07-15
  • 打赏
  • 举报
回复
顶下。。。
304的的哥 2010-07-15
  • 打赏
  • 举报
回复
学习!
flymoon 2010-07-15
  • 打赏
  • 举报
回复
不错哦
鏗木鏘林 2010-07-14
  • 打赏
  • 举报
回复
好详细哦
marvelboy123 2010-07-14
  • 打赏
  • 举报
回复
up!
jenny0810 2010-07-13
  • 打赏
  • 举报
回复
支持回复内容太短了!
xyj052 2010-07-09
  • 打赏
  • 举报
回复
up.........
micheal_xu 2010-07-09
  • 打赏
  • 举报
回复
学习了,谢谢~~~~~~~~~~~~~~~~~~~~
Oraclers 2010-07-09
  • 打赏
  • 举报
回复
支持!!!
管理贝 2010-07-09
  • 打赏
  • 举报
回复
楼主辛苦了
加载更多回复(87)
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...
源码链接: https://pan.quark.cn/s/a4b39357ea24 小程序雷达 AI 驱动的小程序生态选型与风险评估工具,把微信小程序开发资源转化为可筛选、可评估、可对比的技术雷达。 线上地址 主站: Vercel: 适合谁 正在做微信小程序技术选型的产品、研发和架构团队。 需要判断 Taro、uni-app、原生小程序、组件库、云开发和 SDK 风险的团队。 需要把历史 awesome 列表转成可筛选、可对比、可验证技术雷达的维护者。 可以做什么 Radar:按推荐状态、风险等级、资源类型、分类和适用场景浏览小程序生态资源。 Quick Search:快速搜索资源并跳转常用页面。 Compare:对比 Taro、uni-app、原生小程序等核心方案。 Advisor:输入选型问题,获得推荐结论、适用/不适用条件、迁移成本、下一步和证据来源。 Doctor:粘贴小程序项目配置,识别框架依赖、过时方案和迁移风险。 Weekly:查看小程序生态周报和近期风险信号。 数据概览 当前数据集中包含 236 个小程序生态资源。 完整资源可在 Radar 页面和导出能力中查看。 核心样例 Taro ★30.6k+ - 使用 React 的方式开发小程序的框架,同时支持生成多端应用 uni-app ★36.1k+ - 使用 Vue 语法开发小程序、H5、App的统一框架 MPX ★2.1k+ - 增强型小程序框架,深度性能优化,支持跨小程序平台开发,完全兼容原生小程序组件 WePY ★21.7k+ - 支持组件化的小程序开发框架 vant-weapp ★12.3k+ - 高颜值、好用、易扩展的微信小程序 UI 库 tdesign-miniprogram ★1.3...

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧