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



<think>嗯,用户想了解这个SQL语句的作用。首先,我需要拆解这两个语句:DROP TABLE IF EXISTS images 和 CREATE TABLE images (...)。让我先回忆一下每个关键字的作用。 DROP TABLE IF EXISTS images,这部分应该是在删除。IF EXISTS是避免不存在时报错,所以这个语句的作用是安全地删除已有的images。可能用户是想在创建新之前清理旧,防止冲突或者重复。不过得确认用户是否了解这样做会丢失原有数据,尤其是生产环境中需要谨慎使用。 然后是CREATE TABLE语句。里面定义了的结构,像id、product_id这些字段。id是INT自增主键,说明这是主键,自动生成。product_id是外键,关联到products的id,外键约束应该用来保持数据完整性。image_url是VARCHAR(255),可能存储图片的路径或URL。created_at和updated_at用了时间戳,并设置了默认值,还有更新时的自动更新,这样能自动记录创建和修改时间。ENGINE=InnoDB指定了存储引擎,支持事务和外键。字符集是utf8,行格式是COMPACT,可能为了兼容性或存储优化。 需要检查引用内容是否有相关部分。引用[1]提到CREATE TABLE语句的结构和ENGINE设置,引用[3]提到外键约束的语法,引用[4]可能涉及基础SQL语句。确保回答里正确引用这些内容。 用户可能的应用场景是电商系统中的图片管理,比如商品图片。删除旧再创建可能是在初始化数据库或迁移数据。还要注意临时的引用,但这里不是临时,引用[2]提到临时的不同用途,可能不需要提及。 最后要生成相关问题,考虑用户可能接下来想了解外键、存储引擎选择、自增主键或时间戳管理,还有实际应用中的注意事项,比如数据丢失风险。确保问题覆盖这些方面,帮助用户深入理解。</think>### 对SQL语句的解释 #### 1. `DROP TABLE IF EXISTS images;` - **作用**:若数据库中存在名为 `images` 的,则直接删除该。`IF EXISTS` 是容错语法,避免不存在时抛出错误[^1]。 - **应用场景**:常用于初始化数据库或重建结构时清理旧数据。 #### 2. `CREATE TABLE images (...) ENGINE=InnoDB;` - **作用**:新建名为 `images` 的,具体字段定义如下: - `id INT PRIMARY KEY AUTO_INCREMENT`:自增主键,唯一标识每条记录。 - `product_id INT NOT NULL`:非空字段,通过外键约束关联到 `products` 的 `id` 字段[^3]。 - `image_url VARCHAR(255)`:存储图片路径或URL,长度限制255字符。 - `created_at` 和 `updated_at`:自动记录行创建和修改时间,`DEFAULT CURRENT_TIMESTAMP` 设置默认值为当前时间,`ON UPDATE` 实现自动更新[^4]。 - **存储引擎**:使用 `InnoDB` 引擎支持事务和外键约束。 - **字符集**:`utf8` 编码兼容多语言数据,`ROW_FORMAT=COMPACT` 优化存储效率。 #### 完整功能 通过删除旧并重建,实现结构的更新或初始化,适用于数据库迁移或版本升级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值