Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » UltraLite - 数据库管理和参考 » UltraLite SQL 参考 » UltraLite SQL 语句

 

UltraLite CREATE TABLE 语句

此语句用于创建表。

语法
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 AUTOINCREMENTUltraLite 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 数据库属性

注释

除非约束引用表中的多列,否则通常会使用列约束。这些情况下,必须使用表约束。如果语句会导致违反约束,则该语句的执行不会完成。该语句在检测到错误前所做的任何更改都被撤消并报告错误。

表的每一行均有一个唯一主键值。

如果不指定角色名,则按如下方式分配角色名:

  1. 如果没有与表名同名的角色名外键,则将表名指派为角色名。

  2. 如果表名已被使用,则角色名为表名加上表的唯一三位零填充数字。

模式更改   如果模式更改同时开始,则语句将不会被释放。请参见使用 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)
);