此语句用于修改表定义。
ALTER TABLE table-name {
add-clause
| modify-clause
| drop-clause
| rename-clause
}
add-clause :
ADD { column-definition | table-constraint }
modify-clause :
ALTER column-definition
drop-clause : DROP { column-name | CONSTRAINT constraint-name }
rename-clause : RENAME { new-table-name | [ old-column-name TO ] new-column-name | CONSTRAINT old-constraint-name TO new-constraint-name }
column-definition : column-name data-type [ [ NOT ] NULL ] [ DEFAULT column-default ] [ UNIQUE ]
column-default : GLOBAL AUTOINCREMENT [ ( number ) ] | AUTOINCREMENT | CURRENT DATE | CURRENT TIME | CURRENT TIMESTAMP | NULL | NEWID( ) | constant-value
table-constraint : [ CONSTRAINT constraint-name ] { fkey-constraint | unique-key-constraint } [ WITH MAX HASH SIZE integer ]
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 ], ... )
add-clause 向表中添加新列或表约束:
ADD column-definition 子句 向表中添加新列。如果列有缺省值,新列中的所有行将用该缺省值来填充。有关对该子句的关键字和次级子句的说明,请参见UltraLite CREATE TABLE 语句。
ADD table-constraint 子句 向表中添加约束。可选约束名用于以后单独修改或删除约束,而不必修改整个表的约束。有关对该子句的关键字和次级子句的说明,请参见UltraLite CREATE TABLE 语句。
不能在 UltraLite 中添加主键。
modify-clause 更改单个列的定义。请注意,当语句是 ALTER 语句的一部分时,无法在 column-definition 中使用主键。有关 column-definition 的完整说明,请参见UltraLite CREATE TABLE 语句。
drop-clause 删除列或表约束:
DROP column-name 从表中删除列。如果列包含在任何索引、唯一约束、外键或主键中,则必须删除此对象后 UltraLite 才能删除该列。
DROP CONSTRAINT table-constraint 从表的定义中删除命名约束。有关 table-constraint 的完整说明,请参见UltraLite CREATE TABLE 语句。
不能在 UltraLite 中删除主键。
rename-clause 更改表、列或约束的名称:
RENAME new-table-name 将表名更改为 new-table-name。请注意,必须修改所有使用旧表名的应用程序。被自动分配旧表名的外键的名称不更改。
RENAME old-column-name TO new-column-name 将列名更改为 new-column-name。请注意,需要修改所有使用旧列名的应用程序。
RENAME old-constraint-name TO new-constraint-name 将约束名更改为 new-constraint-name。请注意,需要修改所有使用旧约束名的应用程序。
不能在 UltraLite 中重命名主键。
column-constraint 为了确保数据库中数据的完整性,列约束将对列能够保存的值进行限制。列约束只能是 UNIQUE。
UNIQUE 标识唯一标识表中各行的一列或多列。表中任何两行的值在所有指定的列中不能相同。表可以有多个唯一约束。
在一个 ALTER TABLE 语句中,只能添加、修改或删除一个 table-constraint 或 column-constraint。
角色名是外键的名称。role-name 的主要作用是区分同一表的两个外键。或者,可使用 CONSTRAINT constraint-name 命名外键。但是,请勿同时使用两种方法来命名外键。
不能通过 MODIFY 修改表约束或列约束。要更改约束,必须通过 DELETE 删除旧约束并通过 ADD 添加新约束。
名称以 nosync 结尾的表只能重命名为也以 nosync 结尾的表名。请参见UltraLite 中的 nosync 表。
如果影响表的语句已经由其它请求或查询引用,则 ALTER TABLE 语句将无法执行。同样,当表被变更时,UltraLite 不会处理引用表的请求。此外,当数据库包含活动查询或未提交的事务时,您也无法执行 ALTER TABLE 语句。
对于 UltraLite.NET 用户:除非也为所有数据对象(例如 ULDataReader)调用了 Dispose 方法,否则您将无法执行此语句。请参见Dispose 方法。
如果模式更改同时开始,则语句将不会被释放。请参见使用 DDL 语句更改模式。
以下语句从名为 MyEmployees 的虚构表中删除 Street 列。
ALTER TABLE MyEmployees DROP Street; |
以下示例将 MyCustomers 虚构表的 Street 列更改为可容纳约 50 个字符。
ALTER TABLE MyCustomers MODIFY Street CHAR(50); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |