4.1.1 创建对象CREATE语句

作为数据库操作语言中非常重要的部分,CREATE用于创建数据库、数据表以及约束等,下面将详细介绍CREATE的具体应用。

1.创建数据库

创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理。创建数据库时需要指定数据库的名称、文件名称、数据文件大小、初始大小、是否自动增长等内容。SQL Server中可以使用CREATE DATABASE语句,或者通过对象资源管理创建数据库。这里主要介绍CREATE DATABASE的用法。CREAETE DATABASE语句的基本语法格式如下:

主要参数介绍如下:

• database_name:数据库名称,不能与SQL Server中现有的数据库实例名称相冲突,最多可以包含128个字符。

• ON:指定显示定义用来存储数据库中数据的磁盘文件。

• PRIMARY:指定关联的<filespec>列表定义的主文件,在主文件组<filespec>项中指定的第一个文件将生成主文件,一个数据库只能有一个主文件。如果没有指定PRIMARY,那么CREATE DATABASE语句中列出的第一个文件将成为主文件。

• LOG ON:指定用来存储数据库日志的日志文件。LOG ON后跟以逗号分隔的用以定义日志文件的<filespec>项列表。如果没有指定LOG ON,将自动创建一个日志文件,其大小为该数据库的所有数据文件大小总和的25%或512KB,取两者之中的较大者。

• NAME:指定文件的逻辑名称,引用文件时在SQL Server中使用的逻辑名称。

• FILENAME:指定创建文件时由操作系统使用的路径和文件名,执行CREATE DATABASE语句前,指定路径必须存在。

• SIZE:指定数据库文件的初始大小,如果没有为主文件提供size,数据库引擎将使用model数据库中主文件的大小。

• MAXSIZE:指定文件可增大到的最大大小,可以使用KB、MB、GB和TB做后缀,默认值为MB。max_size是整数值。如果不指定max_size,则文件将不断增长直至磁盘被占满。UNLIMITED表示文件一直增长到磁盘充满。

• FILEGROWTH:指定文件的自动增量。文件的FILEGROWTH设置不能超过MAXSIZE设置。该值可以MB、KB、GB、TB或百分比(%)为单位指定。默认值为MB。如果指定%,则增量大小为发生增长时文件大小的指定百分比。值为0时表明自动增长被设置为关闭,不允许增加空间。

【例4.1】创建名称为test_db数据库,输入语句如下:

该段代码创建一个名称为test_db的数据库,设定数据库的主数据文件名称为test_db_data1、主数据文件大小为5MB、增长大小为1MB。注意,该段代码没有指定创建事务日志文件,但是系统默认会创建一个数据库名称加上_log的日志文件,该日志文件的大小为系统默认值2MB,增量为10%,因为没有设置增长限制,所以事务日志文件的最大增长空间将是指定磁盘上所有剩余可用空间。

2.创建数据表

在创建完数据库之后,接下来的工作就是创建数据表。所谓创建数据表,指的是在已经创建好了的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性约束的过程。创建数据表使用CREATE TABLE语句。CREATE TABLE语句的基本语法格式如下:

主要参数介绍如下:

• database_name:要在其中创建表的数据库名称,不指定数据库名称时,则默认使用当前数据库。

• schema_name:新表所属架构的名称,若此项为空,则默认为新表的创建者在当前架构。

• table_name:创建的数据表的名称。

• column_name:数据表中的各个列的名称,列名称必须唯一。

• data_type:指定字段列的数据类型,可以是系统数据类型,也可以是用户定义数据类型。

• NULL | NOT NULL:确定列中是否允许使用空值。

• DEFAULT:用于指定列的默认值。

• ROWGUIDCOL:指示新列是行GUID列。对于每个表,只能将其中的一个uniqueidentifier列指定为ROWGUIDCOL列。

• PRIMARY KEY:主键约束,通过唯一索引对给定的一列或多列强制实体完整性的约束。每个表只能创建一个PRIMARY KEY约束。PRIMARY KEY约束中定义的所有列都必须定义为NOT NULL。

• UNIQUE:唯一性约束,该约束通过唯一索引为一个或多个指定列提供实体完整性。一个表可以有多个UNIQUE约束。

• CLUSTERED | NONCLUSTERED:指示为PRIMARY KEY或UNIQUE约束创建聚集索引还是非聚集索引。PRIMARY KEY约束默认为CLUSTERED,UNIQUE约束默认为NONCLUSTERED。在CREATE TABLE语句中,可只为一个约束指定CLUSTERED。如果在为UNIQUE约束指定CLUSTERED的同时又指定了RIMARY KEY约束,则PRIMARY KEY将默认为NONCLUSTERED。

• [ ASC | DESC ]:指定加入到表约束中的一列或多列的排序顺序,ASC为升序排列,DESC为降序排列,默认值为ASC。

【例4.2】在test_db数据库中创建员工表tb_emp1,结构如表4-1所示。

表4-1 tb_emp1表结构

输入语句如下:

     USE test_db
     CREATE TABLE tb_emp1
     (
     id      INT PRIMARY KEY,
     name   VARCHAR(25) NOT NULL,
     deptId  CHAR(2) NOT NULL,
     salary  SMALLMONEY NULL
     );

该段代码将在test_db数据库中添加一个名称为tb_emp1的数据表。读者可以打开表的设计窗口,看到该表的结构,如图4-1所示。

图4-1 tb_emp1表结构