CREATE TABLE (SQL Server Compact)

创建新的 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 KEY、UNIQUE 或 FOREIGN 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 KEY 和 UNIQUE 约束。我们建议您不要依赖于这种行为,也不要尝试修改由约束创建的任何索引。

  • 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,将为约束分配系统生成的名称。

    • 在 INSERT、UPDATE 或 DELETE 语句中违反约束时,将终止该语句。

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))