CREATE TABLE (SQL Server Compact)

本文详细介绍了如何使用Microsoft SQLServerCompact创建新表,包括语法、参数、注意事项及示例,帮助开发者轻松掌握创建表的基本操作。

创建新的 Microsoft SQL Server Compact 表。

CREATE TABLE table_name 
   ( { < column_definition > | < table_constraint > } [ ,...n ] 
   ) 
< column_definition > ::= 
   { column_name data_type } 
   [ { DEFAULT constant_expression 
      | [ IDENTITY [ ( seed , increment ) ]
      ]
    } ] 
   [ ROWGUIDCOL ] 
   [ < column_constraint > [ ...n ] ]
< column_constraint > ::= 
   [ CONSTRAINT constraint_name ] 
   { [ NULL | NOT NULL ] 
      | [ PRIMARY KEY | UNIQUE ] 
      | REFERENCES ref_table [ ( ref_column ) ] 
      [ ON DELETE { CASCADE | NO ACTION } ] 
      [ ON UPDATE { CASCADE | NO ACTION } ] 
    }
< table_constraint > ::= 
   [ CONSTRAINT constraint_name ] 
   { [ { PRIMARY KEY | UNIQUE } 
      { ( column [ ,...n ] ) } 
      ]
   | FOREIGN KEY 
     ( column [ ,...n ] )
      REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] 
      [ ON DELETE { CASCADE | NO ACTION } ]
      [ ON UPDATE { CASCADE | NO ACTION } ] 
   }
table_name

新表的名称。表名称必须符合标识符规则。table_name 在数据库中必须是唯一的。table_name 最多可包含 128 个字符。

column_name

表中列的名称。列名称必须符合标识符规则,并且在表中必须是唯一的。

注意注意

SQL Server Compact 数据库中的列名称不得以“__sys”开头。例如,不得使用 __sysobjects 作为列名称。

data_type

指定列的数据类型。有关数据类型的信息,请参阅数据类型和 RDA

DEFAULT

指定在插入操作中没有显式提供值时为该列提供的值。除了 IDENTITY 属性定义的列之外,DEFAULT 定义可应用于任何列。删除表时将删除 DEFAULT 定义。常量值可用作默认值。

IDENTITY

指示新列是标识列。在为表添加新行时,SQL Server Compact 将为列提供唯一的增量值。标识列通常与 PRIMARY KEY 约束结合使用以作为表的唯一行标识符。IDENTITY 属性只能分配给int 列。每个表只能创建一个标识列。标识列无法使用绑定默认值和 DEFAULT 约束。必须同时指定种子和增量,或者不指定任何值。如果不指定任何值,则默认为 (1,1)。

seed

向表中加载第一行时所使用的值。

increment

加到所加载的上一行的标识值上的增量值。

ROWGUIDCOL

指示新列是行全局唯一标识符列。每个表只有一个 uniqueidentifier 列可以指派为 ROWGUIDCOL 列。ROWGUIDCOL 属性只能分配给uniqueidentifier 列。

ROWGUIDCOL 自动为插入到表中的新行生成值。

CONSTRAINT

指示 PRIMARY KEYUNIQUEFOREIGN KEY 约束定义开始的可选关键字。约束是强制执行数据完整性并创建表及其列的特殊类型索引的特殊属性。

constraint_name

约束的名称。constraint_name 为可选参数,在数据库中必须是唯一的。如果没有指定 constraint_name,SQL Server Compact 会生成一个约束名。

NULL | NOT NULL

用于指定列中是否允许空值的关键字。从严格意义上讲,NULL 不是一个约束,但可以使用指定NOT NULL 相同的方法来指定。

PRIMARY KEY

通过使用唯一的索引对特定列强制执行实体完整性的约束。每个表只能创建一个 PRIMARY KEY 约束。

UNIQUE

通过使用唯一的索引提供特定列的实体完整性的约束。UNIQUE 约束中的列可以为 NULL,但每一列只允许一个 NULL 值。一个表可以包含多个UNIQUE 约束。

注意注意

SQL Server Compact 可以使用索引强制执行 PRIMARY KEYUNIQUE 约束。我们建议您不要依赖于这种行为,也不要尝试修改由约束创建的任何索引。

FOREIGN KEY...REFERENCES

为列中的数据提供引用完整性的约束。FOREIGN KEY 约束要求列中的每个值都存在于所引用表的指定的列中。

ref_table

FOREIGN KEY 约束所引用的表的名称。

( ref_column [ ,... n ] )

FOREIGN KEY 约束所引用的表中的一列或多列。

ON DELETE {CASCADE | NO ACTION}

指定当创建的表中的行具有引用关系并且从父表中删除该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION

如果指定 CASCADE,则从父表中删除被引用的行时,也将从引用表中删除具有引用关系的行。如果指定NO ACTION,SQL Server Compact 将返回一个错误,并且回滚父表中所引用行上的删除操作。

ON UPDATE {CASCADE | NO ACTION}

指定当创建的表中的行具有引用关系并且在父表中更新该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION

如果指定 CASCADE,则在父表中更新被引用的行时,也将在引用表中更新具有引用关系的行。如果指定NO ACTION,SQL Server Compact 将返回一个错误,并且回滚父表中所引用行上的更新操作。

column

用括号括起来的一列或多列,在表约束中表示这些列用在约束定义中。

列定义

在创建表时,必须指定至少一个列定义。

约束

  • PRIMARY KEY 约束

    • 一个表只能包含一个 PRIMARY KEY 约束。

    • 每个 PRIMARY KEY 都生成一个索引。

    • 在 PRIMARY KEY 约束内定义的所有列都必须定义为 NOT NULL。如果未指定为空性,加入 PRIMARY KEY 约束的所有列的为空性都将设置为 NOT NULL。

  • UNIQUE 约束

    • 每个 UNIQUE 约束都生成一个索引。

  • FOREIGN KEY 约束

    • 如果在 FOREIGN KEY 约束的列中输入非 NULL 值,则此值必须在被引用的列中存在;否则,将返回违反外键约束的错误消息。

    • FOREIGN KEY 约束可以引用同一表中的其他列,且引用为自我引用。但是,FOREIGN KEY 约束不能用于创建自我引用或循环的 FOREIGN KEY 约束。

    • 列级 FOREIGN KEY 约束的 REFERENCES 子句仅能列出一个引用列。该列必须与定义约束的列具有相同的数据类型。

    • 表级 FOREIGN KEY 约束的 REFERENCES 子句中引用列的数目必须与约束列的列表中的列数相同。每个引用列的数据类型也必须与列的列表中相应列的数据类型相同。

    • FOREIGN KEY 约束只能引用被引用表的 PRIMARY KEY 或 UNIQUE 约束中的列。FOREIGN KEY 约束不能引用唯一索引。

  • 其他约束信息

    • 为约束创建的索引不能用 DROP INDEX 语句删除。必须用 ALTER TABLE DROP CONSTRAINT 语句删除约束。

    • 约束名必须符合标识符规则,但其名称的首字符不能以数字号 (#) 开头。如果没有提供 CONSTRAINT 关键字和constraint_name,将为约束分配系统生成的名称。

    • INSERTUPDATEDELETE 语句中违反约束时,将终止该语句。

DEFAULT 定义

每列只能有一个 DEFAULT 定义。这可以包含常量值或常量函数。

表定义中的为空性规则

列的为空性用于确定在该列中是否允许以空值 (NULL) 作为其数据。NULL 不是零或空白。它表示没有输入任何内容,或提供了一个显式 NULL 值,通常表示该值未知或不适用。

下面的示例用于显示如何完成下列各项操作:

  1. 使用标识列作为 PRIMARY KEY 创建具有两列的表。

  2. 使用 PRIMARY KEY 约束创建具有一列的表。

  3. 创建一个表,使其中的一个列引用另一个表中的列。

CREATE TABLE MyCustomers (CustID int IDENTITY (100,1) PRIMARY KEY, CompanyName nvarchar (50))
CREATE TABLE MyCustomers2 (CustID int CONSTRAINT pkCustId PRIMARY KEY)
CREATE TABLE MyOrders (OrderID int, CustID int REFERENCES MyCustomers(CustID))


http://msdn.microsoft.com/zh-cn/library/ms173393%28SQL.110%29.aspx



### 关于SQL Server 2008 Lightweight Edition 或 Compact Version 对于SQL Server 2008的轻量级版本,主要可以关注 **SQL Server Compact Edition (CE)** 和 **SQL Server Express** 这两个选项。以下是它们的特点和适用场景: #### SQL Server Compact Edition (CE) SQL Server Compact Edition 是微软提供的一种嵌入式数据库解决方案,专为桌面应用程序设计[^1]。它具有以下特点: - **免费**: 不需要额外付费即可使用。 - **轻量化**: 文件大小非常小,适合资源受限的环境。 - **无独立服务运行**: 它是一个完全基于进程内的数据库引擎,不需要单独的服务来管理数据存储。 - **易于部署**: 配置简单,无需复杂的安装过程,只需复制几个文件到目标机器即可完成部署。 - **支持的最大数据库尺寸**: 可处理高达4GB的数据库文件,这与SQL Server Express相同[^1]。 - **连接数限制**: 支持最多256个来自主机机器的同时连接。尽管其初衷并非针对多用户应用开发,但在某些情况下仍可利用这一特性构建响应迅速的应用程序。 需要注意的是,SQL Server Compact Edition 并不适用于所有类型的项目。例如,如果您的需求涉及复杂查询或者频繁的数据交互操作,则可能更适合选用功能更强大的其他版本如Express。 #### SQL Server Express 虽然严格意义上讲这不是所谓的“compact”版本,但是作为SQL Server家族的一员,SQL Server Express 提供了一个相对简化但仍保持强大特性的平台。它的优势在于: - 同样具备成本效益——即它是免费提供的; - 能够承载更大的工作负载以及更高的并发访问请求相比Compact Edition而言; - 更接近完整的SQL Server产品线,在升级至标准版或其他高级别实例时更加平滑顺畅; 然而,由于它依赖于后台服务来进行运作,因此相较于纯粹内置于客户端中的Compact Edition来说会稍微增加一些系统开销。 综上所述,如果您正在寻找一种简便易用又不会占用太多计算资源的方式来满足小型或单机环境下对关系型数据库的需求的话,那么无论是选择SQL Server Compact还是Express都会是非常不错的选择之一取决于具体应用场景的不同而定。 ```sql -- 创建一个新的数据库示例(适用于SQL Server Express) CREATE DATABASE ExampleDatabase; GO USE ExampleDatabase; GO CREATE TABLE SampleTable ( ID INT PRIMARY KEY, Name NVARCHAR(50), CreatedDate DATETIME DEFAULT GETDATE() ); INSERT INTO SampleTable VALUES (1,'Test',NULL); SELECT * FROM SampleTable; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值