此语句用于创建表。
CREATE TABLE table-name ( { column-definition | table-constraint }, ... )
column-definition : column-name data-type [ [ NOT ] NULL ] [ DEFAULT column-default ] [ column-constraint ]
column-default : GLOBAL AUTOINCREMENT [ ( number ) ] | AUTOINCREMENT | CURRENT DATE | CURRENT TIME | CURRENT TIMESTAMP | NULL | NEWID( ) | constant-value
column-constraint : PRIMARY KEY | UNIQUE
table-constraint : { [ CONSTRAINT constraint-name ] pkey-constraint | fkey-constraint | unique-key-constraint } [ WITH MAX HASH SIZE integer ]
pkey-constraint :
PRIMARY KEY [ ordered-column-list ]
fkey-constraint : [ NOT NULL ] FOREIGN KEY [ role-name ] ( ordered-column-list ) REFERENCES table-name ( column-name, ... ) [ CHECK ON COMMIT ]
unique-key-constraint : UNIQUE ( ordered-column-list )
ordered-column-list : ( column-name [ ASC | DESC ], ... )
column-definition 定义表中的列。此子句的可用参数包括:
column-name 列名是一个标识符。同一表中的两列不能同名。请参见UltraLite 中的标识符。
data-type 列的数据类型。请参见UltraLite 中的数据类型。
[ NOT ] NULL 如果指定 NOT NULL,或者列具有 PRIMARY KEY 或 UNIQUE 约束,则该列在任何行中都不能含有 NULL。否则,允许包含 NULL。
column-default 设置列的缺省值。如果指定了 DEFAULT 值,则它将用作未指定列值的任何 INSERT 语句中的列值。如果未指定任何 DEFAULT 值,则它等效于 DEFAULT NULL。缺省值选项包括:
AUTOINCREMENT 使用 AUTOINCREMENT 时,列必须是整型数据类型之一或是精确的数字类型。插入到表中时,如果没有指定 AUTOINCREMENT 列的值,则生成一个比列中的任何其它值都大的唯一值。如果 INSERT 指定的列值大于列的当前最大值,则该值将用作后续插入的起点值。
在 UltraLite 中,创建表时自动增量值不能设置为 0。如果该列使用有符号数据类型,AUTOINCREMENT 将生成负值。因此,应将 AUTOINCREMENT 列声明为无符号整数,以防止使用负值。
GLOBAL AUTOINCREMENT 与 AUTOINCREMENT 类似,只不过要对域进行分区。每个分区都包含相同数目的值。为每个数据库副本指定一个唯一全局数据库标识号。UltraLite 只从用数据库编号唯一标识的分区中提供数据库中的缺省值。请参见在 UltraLite 中使用 GLOBAL AUTOINCREMENT和UltraLite global_database_id 选项。
[ NOT ] NULL 控制列是否可以包含 NULL。
NEWID( ) 生成一个唯一标识符值的函数。请参见NEWID 函数 [Miscellaneous]。
CURRENT TIMESTAMP 组合 CURRENT DATE 和 CURRENT TIME,以构成包含年、月、日、小时、分钟、秒和秒的小数部分的 TIMESTAMP 值。秒的小数值存储到 3 个小数位。其准确性受系统时钟准确性的限制。请参见CURRENT TIMESTAMP 特殊值。
CURRENT DATE 存储当前年月日。请参见CURRENT DATE 特殊值。
CURRENT TIME 存储当前小时、分钟、秒和秒的小数值。请参见CURRENT TIME 特殊值。
constant-value 列的数据类型的常量。该常量通常是一个数字或一个字符串。
column-constraint 子句 指定列约束以限制可出现在列中的值。列约束可以为下列项之一:
PRIMARY KEY 设置为 column-constraint 的一部分时,PRIMARY KEY 子句将此列设置为表的主键。主键用于唯一标识表中的每一行。缺省情况下,主键包括的列不能为 NULL。
UNIQUE 标识唯一标识表中各行的一列或多列。表中任何两行的值在所有指定的列中不能相同。表可以有多个唯一约束。不允许使用 NULL 值。
table-constraint 子句 指定表约束以限制此表中一个或多个列可包含的值。CONSTRAINT 子句用于为表约束指定标识符。表约束可以为主键约束、外键约束或唯一约束的形式,如以下定义:
pkey-constraint 子句 将指定列设置为表的主键。主键用于唯一标识表中的每一行。主键包括的列不能为 NULL。
fkey-constraint 子句 指定外键约束以限制一个或多个列的值必须与另一个表的主键(或唯一约束)中的值匹配。
NOT NULL 子句 指定 NOT NULL 以在外键列中不允许使用 NULL。外键中的 NULL 表示主表中没有任何行与外表中的此行相对应。如果多列外键中至少有一个值为 NULL,则该键的其它列中可以保存的值没有限制。
role-name 子句 指定 role-name 命名外键。role-name 用于区分相同表中的外键。或者,可使用 CONSTRAINT constraint-name 命名外键。但是,请勿同时使用两种方法来命名外键。
REFERENCES 子句 指定 REFERENCES 子句以将主表中的一个或多个列定义为用作外键约束。在 REFERENCES 列约束中指定的所有 column-name 必须为主表中的列,必须受唯一约束或主键约束的制约。
CHECK ON COMMIT 强制执行外键约束之前,指定 CHECK ON COMMIT 以使数据库服务器等待 COMMIT。缺省情况下,在插入、更新或删除操作期间会立即强制执行外键约束。但是,设置了 CHECK ON COMMIT 时,即使数据库更改违反外键约束其也可按任意顺序进行,可以在出现下一个 COMMIT 之前更正不一致的数据。
unique-key-constraint 子句 指定唯一约束来标识一个或多个唯一标识表中每行的列。表中任何两行的值在所有指定的列中不能相同。表可以有多个唯一约束。
WITH MAX HASH SIZE 为此索引设置散列大小(按字节计)。该值替换对数据库有效的缺省 MaxHashSize 属性。要学习缺省大小,请参见访问 UltraLite 数据库属性。
除非约束引用表中的多列,否则通常会使用列约束。这些情况下,必须使用表约束。如果语句会导致违反约束,则该语句的执行不会完成。该语句在检测到错误前所做的任何更改都被撤消并报告错误。
表的每一行均有一个唯一主键值。
如果不指定角色名,则按如下方式分配角色名:
如果没有与表名同名的角色名外键,则将表名指派为角色名。
如果表名已被使用,则角色名为表名加上表的唯一三位零填充数字。
模式更改 如果模式更改同时开始,则语句将不会被释放。请参见使用 DDL 语句更改模式。
当 CREATE TABLE 语句正在被处理时,UltraLite 不会处理引用该表的请求或查询。此外,当数据库包含活动查询或未提交的事务时,您也无法执行 CREATE TABLE 语句。
对于 UltraLite.NET 用户:除非也为所有数据对象(例如 ULDataReader)调用了 Dispose 方法,否则您将无法执行此语句。请参见Dispose 方法。
自动提交。
下面的语句为图书馆数据库创建用于保存图书信息的表。
CREATE TABLE library_books ( isbn CHAR(20) PRIMARY KEY, copyright_date DATE, title CHAR(100), author CHAR(50), location CHAR(50), FOREIGN KEY location REFERENCES room ); |
以下语句为图书馆数据库创建用于保存借出图书信息的表。date_borrowed 的缺省值指示在创建条目的当天借出图书。date_returned 列在归还图书前一直为 NULL。
CREATE TABLE borrowed_book ( loaner_name CHAR(100) PRIMARY KEY, date_borrowed DATE NOT NULL DEFAULT CURRENT DATE, date_returned DATE, book CHAR(20) FOREIGN KEY book REFERENCES library_books (isbn) ); |
下面的语句将为某销售数据库创建保存订单和订单项信息的表。
CREATE TABLE Orders ( order_num INTEGER NOT NULL PRIMARY KEY, date_ordered DATE, name CHAR(80) ); CREATE TABLE Order_item ( order_num INTEGER NOT NULL, item_num SMALLINT NOT NULL, PRIMARY KEY (order_num, item_num), FOREIGN KEY (order_num) REFERENCES Orders (order_num) ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |