随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!
如有Sybase数据库技术问题需要咨询,请联系我!
以下官方手册为SAP IQ 16.0 SP03中文版:
CREATE TABLE 语句
转至参数 (第 412 页) 转至示例 (第 419 页) 转至用法 (第 422 页) 转至标准 (第 423 页) 转至权限 (第 424 页)
语法
CREATE [ { GLOBAL | LOCAL } TEMPORARY ] TABLE
[ IF NOT EXISTS ] [ owner. ]table-name
… ( column-definition [ column-constraint ] … [ , column-definition [ column-constraint ] … ] [ , table-constraint ] … )
|{ ENABLE | DISABLE } RLV STORE
…[ IN dbspace-name ]
…[ ON COMMIT { DELETE | PRESERVE } ROWS ]
[ AT location-string ] [PARTITION BY
| composite-partitioning-scheme ]
column-definition - (back to Syntax)
column-name data-type
[ [ NOT ] NULL ]
[ DEFAULT default-value | IDENTITY ]
[ PARTITION | SUBPARTITION ( partition-name IN dbspace-name
[ , ... ] ) ]
default-value - (back to column-definition)
| string
| global variable
| [ - ] number
| ( constant-expression )
| built-in-function( constant-expression )
| AUTOINCREMENT
| CURRENT DATABASE
| CURRENT REMOTE USER
| NULL
| TIMESTAMP
| LAST USER
special-value - (back to default value)
CURRENT
{ DATE
| TIME
| TIMESTAMP
| USER
| PUBLISHER }
| USER
column-constraint - (back to Syntax)
[ CONSTRAINT constraint-name ] {
{ UNIQUE
| PRIMARY KEY
| REFERENCES table-name [ ( column-name ) ] [ action ]
}
[ IN dbspace-name ]
| CHECK ( condition )
| IQ UNIQUE ( integer )
}
table-constraint - (back to Syntax)
[ CONSTRAINT constraint-name ]
{ { UNIQUE ( column-name [ , column-name ] … )
| PRIMARY KEY ( column-name [ , column-name ] … )
}
[ IN dbspace-name ]
| CHECK ( condition )
| IQ UNIQUE ( integer )
}
foreign-key-constraint - (back to table-constraint)
FOREIGN KEY [ role-name ] [ ( column-name [ , column-name ] … ) ]
… REFERENCES table-name [ ( column-name [ , column-name ] … ) ]
… [ actions ] [ IN dbspace-name ]
actions - (back to foreign-key-constraint) [ ON { UPDATE | DELETE } RESTRICT ]
location-string - (back to Syntax) or (back to composite-partitioning- scheme)
{ remote-server-name. [ db-name ].[ owner ].object-name
| remote-server-name; [ db-name ]; [ owner ];object-name }
range-partitioning-scheme - (back to Syntax)
RANGE ( partition-key ) ( range-partition-decl [,range-partition-decl ... ] )
partition-key - (back to range-partitioning-scheme) or (back to hash- partitioning-scheme)
column-name
range-partition-decl - (back to range-partitioning-scheme)
VALUES <= ( { constant-expr
| MAX } [ , { constant-expr
| MAX }]... )
[ IN dbspace-name ]
hash-partitioning-scheme - (back to Syntax) or (back to composite- partitioning-scheme)
HASH ( partition-key [ , partition-key, … ] )
composite-partitioning-scheme - (back to Syntax)
hash-partitioning-scheme SUBPARTITION range-partitioning-scheme
(返回顶部) (第 410 页)
• IN – 在 column-definition、column-constraint、table-constraint、foreign-key 以及 partition-decl 子句中用于指定将创建对象的 dbspace。如果省略 IN 子句,SAP Sybase IQ 将在已分配表的 dbspace 中创建对象。
指定 SYSTEM 和该子句,以将永久表或临时表放在目录存储库中。指定 IQ_SYSTEM_TEMP 以将临时用户对象(表、分区或表索引)存储在 IQ_SYSTEM_TEMP 中,或者在 TEMP_DATA_IN_SHARED_TEMP 选项设置为 'ON' 且 IQ_SHARED_TEMP dbspace 包含 RW 文件时,存储在 IQ_SHARED_TEMP 中。(无 法同时指定 IN 子句和 IQ_SHARED_TEMP。)IN 子句的所有其它用法均被忽略。 缺省情况下,所有永久表均放置在主 IQ 存储库中,所有临时表放置在临时 IQ 存 储库中。全局临时表和局部临时表决不能出现在 IQ 存储库中。
不支持下列语法:
CREATE LOCAL TEMPORARY TABLE tab1(c1 int) IN IQ_SHARED_TEMP
无法将 BIT 数据类型列显式置于 dbspace 中。BIT 数据类型不支持以下内容:
CREATE TABLE t1(c1_bit bit IN iq_main);
• ON COMMIT – 仅允许用于临时表。缺省情况下,临时表的行将在 COMMIT(提 交)时被删除。
• AT – 创建映射到 location-string 子句指定的远程位置的代理表。代理表名不能超过 30 个字符。AT 子句支持分号 (;) 作为分隔符。如果分号出现在 location-string 子句 中的任何位置,则分号将用作字段分隔符。如果没有分号,则使用句号作为字段 分隔符。这样一来,便可在数据库和所有者字段中使用文件名和扩展名。
分号字段分隔符主要用于当前不支持的服务器类;但是,您也可以在句点用作字 段分隔符的情况下使用它们。例如,此语句将表 proxy_a 映射到远程服务器 myasa 上的 SQL Anywhere 数据库 mydb:
CREATE TABLE proxy_a1 AT 'myasa;mydb;;a1'
忽略远程表的外键定义。引用远程表的局部表的外键定义也会被忽略。如果远程 服务器支持主键,则主键定义会发送到此服务器。
在 Simplex 环境中,不能在同一节点上创建引用远程表的代理表。在 Multiplex 环 境中,不能创建引用在 Multiplex 中定义的远程表的代理表。
• IF NOT EXISTS – 如果指定的对象已存在,则不进行任何更改,也不会返回错 误。
• { ENABLE | DISABLE } RLV STORE – 将该表注册到 RLV 存储库以进行实时内 存更新。IQ 临时表对此不支持。此值替代数据库选项 BASE_TABLES_IN_RLV 的 值。将此值设置为 ENABLE 需要 CREATE TABLE 系统特权以及 RLV 存储 dbspace 的 CREATE 权限。
• column-definition – 定义表列。所允许的数据类型在《参考:构件块、表和过程》
>“SQL 数据类型”中进行了介绍。同一表中的两列不能同名。最多可以创建 45,000
列;但如果一个表中的列多于 10,000,则可能会导致性能下降。
• [ NOT ] NULL ] – 包括或排除 NULL 值。如果指定 NOT NULL,或者列具有 UNIQUE 或 PRIMARY KEY 约束,则该列不能含有任何 NULL 值。每个表中 允许 NULL 的列数存在限制,最多为大约 8*(database-page-size - 30)。
• DEFAULT default-value – 通过 CREATE TABLE(和 ALTER TABLE)语句中 的 DEFAULT 关键字指定缺省列值。DEFAULT 值用作未指定列值的任何 INSERT
(或 LOAD)语句中列的值。
• DEFAULT AUTOINCREMENT – DEFAULT AUTOINCREMENT 列的值唯一 地标识表中的每一行。此类型的列也称为 IDENTITY 列,可与 Adaptive Server 兼容。IDENTITY/DEFAULT AUTOINCREMENT 列存储在插入和更新期间自 动生成的顺序编号。使用 IDENTITY 或 DEFAULT AUTOINCREMENT 时,列 必须是小数位数为 0 的整数数据类型之一或精确的数字类型。列值也可以是 NULL。必须使用所有者名称来限定指定的表名。
ON 可向表中插入数据。如果没有指定 IDENTITY/DEFAULT AUTOINCREMENT 列的值,则生成一个比列中的任何其它值都大的唯一值。 如果 INSERT 指定了列值,则使用该值;如果指定的值不大于列的当前最大 值,该值将用作后续插入的起点。
删除行不会递减 IDENTITY/AUTOINCREMENT 计数器的值。由于删除行而产 生的间隙只能由使用插入时的显式赋值填充。数据库选项 IDENTITY_INSERT 必须设置为表名,才能向 IDENTITY/AUTOINCREMENT 列执行插入操作。
例如,以下示例创建一个带有 IDENTITY 列的表,并向其显式添加一些数据:
CREATE TABLE mytable(c1 INT IDENTITY);
SET TEMPORARY OPTION IDENTITY_INSERT = "DBA".mytable; INSERT INTO mytable VALUES(5);
显式插入小于该列最大值的行号后,后面没有显式赋值的行仍自动递增为比上 一个最大值大 1 的值。
通过检查 @@identity 全局变量,可以找到最近一次插入的列值。
• IDENTITY – 使用 AUTOINCREMENT 缺省值的替代方法,与 Transact-SQL® 兼容。在 SAP Sybase IQ 中,可使用 IDENTITY 或 DEFAULT AUTOINCREMENT 子句来创建标识列。
• table-constraint – 帮助确保数据库中数据的完整性。共有四种类型的完整性约 束:
• UNIQUE – 标识唯一识别表中各行的一列或多列。表中任何两行的值在所有 指定的列中不能相同。表可以有多个唯一约束。
• PRIMARY KEY – 与 UNIQUE 约束相同,但表只能有一个主键约束。不能为 同一列同时指定 PRIMARY KEY 约束和 UNIQUE 约束。主键通常标识行的最 佳标识符。例如,客户号可能是 customer 表的主键。
• FOREIGN KEY – 将某组列的值局限于与另一个表的主键或唯一约束中的值 匹配。例如,外键约束可用于确保 invoice 表中的客户号与 customer 表中的客 户号相对应。
不能在局部临时表上创建外键约束。全局临时表必须用 ON COMMIT PRESERVE ROWS 创建。
• CHECK – 允许对任意条件进行校验。例如,检查约束可用于确保名为 Gender 的列只包含值 male 或 female。表中的任何行都不能违反约束。如果 INSERT 或 UPDATE 语句会导致行违反约束,则不允许执行相应操作并且撤消语句的作用。
列检查约束中以符号 '@' 开头的列标识符是实际列名的占位符。以下格式的语 句:
CREATE TABLE t1(c1 INTEGER CHECK (@foo < 5))
与下面的语句完全相同:
CREATE TABLE t1(c1 INTEGER CHECK (c1 < 5))
表检查约束中以符号 '@' 开头的列标识符不是占位符。
如果一条语句会引起数据库的更改并且这些更改会使数据库违反完整性约束,则 该语句不会得到有效执行,并且系统会报告一条错误。(有效是指系统检测到错 误之前该语句所做的任何更改都被撤消。)
SAP Sybase IQ 通过为该列创建 HG 索引来强制执行单列 UNIQUE 约束。
注意: 不能将含有 BIT 数据类型的列定义为 UNIQUE 或 PRIMARY KEY 约束。 另外,BIT 数据类型的列缺省设置为不允许 NULL 值;您可以通过显式定义该列 允许 NULL 值来更改这种情况。
• column-constraint – 限制列可以容纳的值。列约束和表约束有助于确保数据库中 数据的完整性。如果语句会导致违反约束,则该语句的执行不会完成。该语句在 检测到错误前所做的任何更改都被撤消并报告错误。列约束是相应表约束的缩写。 例如,下列语句是等效的:
CREATE TABLE Products ( product_num integer UNIQUE
)
CREATE TABLE Products ( product_num integer, UNIQUE ( product_num )
)
通常使用列约束,除非约束引用了表中的多个列。此类情况下,必须使用表约束。
• IQ UNIQUE – 定义列的预期基数并确定是作为 Flat FP 还是 NBit FP 来装载该 列。IQ UNIQUE(n) 值显式设置为 0 会作为 Flat FP 装载该列。不带 IQ UNIQUE 约束的列将隐式装载为 NBit,一直到 FP_NBIT_AUTOSIZE_LIMIT、 FP_NBIT_LOOKUP_MB 和 FP_NBIT_ROLLOVER_MAX_MB 选项定义的限
制:
• FP_NBIT_AUTOSIZE_LIMIT 限制装载为 NBit 的不同值的数量
• FP_NBIT_LOOKUP_MB 为 NBit 字典总大小设置阈值
• FP_NBIT_ROLLOVER_MAX_MB 为从 NBit 至 Flat FP 的隐式 NBit 切换设 置字典大小
• FP_NBIT_ENFORCE_LIMITS 强制执行 NBit 字典大小限制。此选项缺省设 置为 OFF
不必使用 n 值小于 FP_NBIT_AUTOSIZE_LIMIT 的 IQ UNIQUE。自动大小调 整功能会自动将所有中低基数列的大小调整为 NBit。如果想要将列装载为 Flat FP,或者想要在不同值的数量超出 FP_NBIT_AUTOSIZE_LIMIT 时将列装载为 NBit,请使用 IQ UNIQUE。
注意:
• 当指定高 IQ UNIQUE 值时,请考虑内存的使用情况。如果计算机资源受到限 制,应避免带有 FP_NBIT_ENFORCE_LIMITS='OFF'(缺省设置)的装载。 在 SAP Sybase IQ 16.0 之前,IQ UNIQUE n 值 > 16777216 时会切换到 Flat FP。在 16.0 中,支持对较大的 IQ UNIQUE 值进行标识化,但鉴于基数和列宽,该值 可能需要非常多的内存资源。
• BIT、BLOB 和 CLOB 数据类型不支持 NBit 字典压缩。如果 FP_NBIT_IQ15_COMPATIBILITY='OFF',则在包含这些数据类型的 CREATE TABLE 或 ALTER TABLE 语句中指定的非零 IQ UNIQUE 列将返回一个错误。
• column-constraint 和 table-constraint 子句 – 列约束和表约束有助于确保数据库 中数据的完整性。
• PRIMARY KEY 或 PRIMARY KEY ( column-name, … ) – 表的主键由列出的 列组成,指定的列都不可含有任何 NULL 值。SAP Sybase IQ 确保表中的每一 行都有唯一的主键值。表只能有一个 PRIMARY KEY。
采用第二种格式(PRIMARY KEY 后面跟有列的列表)时,创建的主键所包括 的列是按其定义的顺序排序的,而不是按列出的顺序排序。
将列指定为 PRIMARY KEY、FOREIGN KEY 或 UNIQUE 时,SAP Sybase IQ 会自动为其创建 High_Group 索引。对于多列主键,该索引位于主键上,而不 是各个列上。为了获得最佳性能,应单独用 HG 或 LF 索引对各列创建索引。
• REFERENCES primary-table-name [(primary-column-name)] – 将列定义为 主键的外键,或主表的唯一约束。通常,外键针对的是主键而不是唯一约束。 如果指定主列名,则它必须与主表中的某一列相匹配,而该列受唯一约束或主 键约束的制约,而且该约束必须仅包含这一列。否则,外键会引用第二个表的 主键。主键与外键必须具有相同的数据类型、精度、小数位数和符号。仅会为 单列外键创建非唯一单列 HG 索引。对于多列外键,SAP Sybase IQ 将创建非 唯一复合 HG 索引。唯一或非唯一 HG 索引的多列组合键的最大宽度为 1KB。
临时表不能有引用基表的外键,而基表不能有引用临时表的外键。局部临时表 不能有外键,也不能被外键引用。
• FOREIGN KEY [role-name] [(...)] REFERENCES primary-table-name [(...)] – 定义对另一个表中主键或唯一约束的外键引用。通常,外键针对的是主键而不 是唯一约束。(此处所述的另一个表称为主表。)
如果未指定主表列名,主表列即是表的主键中的列。如果未指定外键列名,则 外键列的列名与主表的列名相同。如果指定外键列名,则还必须指定主键列 名,列名按照列表中的位置成对出现。
如果主表与外键表不一样,则表明唯一约束或主键约束已在被引用键上定义。 被引用键和外键必须具有相同的列数,以及相同的数据类型、符号、精度和小 数位数。
行的外键值必须作为主表中某一行的候选键值出现,除非外键的允许 null 值的 列中有一列或多列包含 null 值。
所有非显式定义的外键列在创建时会被自动赋予与主表中相应列相同的数据类 型。这些自动创建的列不能属于外表的主键。因此,必须显式创建同时在主键 和外键中使用的列。
role-name 是外键的名称。role-name 的主要作用是区分同一表的两个外键。如 果未指定 role-name,则按如下方式分配角色名:
1. 如果没有与表名同名的 role-name 外键,则将表名指派为 role-name。
2. 如果表名已被使用,则 role-name 为表名加上表的唯一 3 位零填充数字。
参照完整性操作可定义为维护数据库中的外键关系而采取的操作。更改主键值 或从数据库表中删除主键值时,其它表中可能有一些相应的外键值需要以某种 方式修改。可以指定 ON DELETE 子句,后跟 RESTRICT 子句。
• RESTRICT – 如果在数据库的其它地方存在相应的外键时您试图更新或删除 主键值,则将生成错误。如果试图更新外键,以便通过候选键创建不匹配的新 值,则将生成错误。这是缺省操作,除非您指定 LOAD 可以拒绝违反参照完 整性的行。这样便会在语句级别强制实施参照完整性。
如果使用 CHECK ON COMMIT 时未指定任何操作,那么 RESTRICT 将被视为 DELETE 的一项操作。SAP Sybase IQ 不支持 CHECK ON COMMIT。
全局临时表不能有引用基表的外键,而基表不能有引用全局临时表的外键。局 部临时表不能有外键,也不能被外键引用。
• CHECK (条件) – 不允许行违反条件。如果 INSERT 语句会导致行违反条 件,则不允许进行该操作并且撤消语句的作用。
只有条件为 FALSE 时才会拒绝更改;特别是,当条件为 UNKNOWN 时,允许 进行更改。SAP Sybase IQ 不会强制遵守 CHECK 条件。
注意: 如果可能,不要在 SAP Sybase IQ 中定义参照完整性外键-主键关系, 除非您确定其中没有孤立外键。
• 远程表 – 忽略远程表的外键定义。引用远程表的局部表的外键定义也会被忽略。 如果远程服务器支持主键,则主键定义会发送到此服务器。
• PARTITION BY – 将大表拆分为多个便于管理的小存储对象。各个分区共用父 表的相同逻辑属性,但可放置在单独的 dbspace 中并分别进行管理。SAP Sybase IQ 支持多个表分区模式:
• 散列分区
• 范围分区
• 复合分区
分区键是包含表分区键的一个或多个列。分区键可包含 NULL 和 DEFAULT 值, 但不能包含:
• LOB(BLOB 或 CLOB)列
• BINARY 或 VARBINARY 列
• 长度超过 255 个字节的 CHAR 或 VARCHAR 列
• BIT 列
• FLOAT/DOUBLE/REAL 列
• PARTITION BY RANGE – 根据分区列中的值范围对行进行分区。范围分区被限 定为有 1 个分区键列和最多 1024 个分区。在范围分区模式中,分区键是包含表分 区键的列:
range-partition-decl:
partition-name VALUES <= ( {constant-expr | MAX } [ ,
{ constant-expr | MAX }]... ) [ IN dbspace-name ]
分区名称是存储表行的新分区的名称。在表分区集合中,分区名称必须唯一。分 区名称是必需项。
• VALUE – 按升序为每个分区指定上限(含上限)。用户必须为每个范围分区 指定分区条件,确保将每一行只分配到一个分区。分区列允许 NULL 值,将 NULL 作为分区键值的行属于第一个表分区。但 NULL 不能是界限值。
第一个分区没有下限(MIN 值)。分区键第一列中单元格值为 NULL 的行属 于第一个分区。对于最后一个分区,您可以指定一个上限(含上限)或 MAX。 如果最后一个分区的上限值不是 MAX,则加载或插入其分区键值大于最后一个 分区上限值的任何行都将生成错误。
• Max – 表示无限大的上限,只能为最后一个分区指定。
• IN – 在 partition-decl 中指定其中应该包含分区行的 dbspace。 以下限制影响范围分区表的分区键和界限值:
• 分区界限必须是常量,而不是常量表达式。
• 分区界限必须按照分区的创建顺序以升序排列。也就是说,第二个分区的上限 必须大于第一个分区的上限,依此类推。 此外,分区界限值必须与相应的分区键列数据类型兼容。例如,VARCHAR 与 CHAR 兼容。
• 如果某个界限值的数据类型不同于其对应分区键列的数据类型,SAP Sybase IQ
会将界限值的数据类型转换为分区键列的数据类型,但存在以下例外情况:
• 不允许进行显式转换。以下示例尝试将 INT 显式转换为 VARCHAR,并生成错 误:
CREATE TABLE Employees(emp_name VARCHAR(20)) PARTITION BY RANGE(emp_name)
(p1 VALUES <=(CAST (1 AS VARCHAR(20))), p2 VALUES <= (CAST (10 AS VARCHAR(20)))
• 不允许执行可导致数据丢失的隐式转换。在以下示例中,分区界限与分区键类 型不兼容。舍入假设可导致数据丢失,并生成错误:
CREATE TABLE emp_id (id INT) PARTITION BY RANGE(id) (p1 VALUES
<= (10.5), p2 VALUES <= (100.5))
• 在以下示例中,分区界限与分区键数据类型兼容。界限值会直接转换为浮点 值。无需进行舍入处理,且支持转换:
CREATE TABLE id_emp (id FLOAT)
PARTITION BY RANGE(id) (p1 VALUES <= (10), p2 VALUES <= (100))
• 不允许将非二进制数据类型转换为二进制数据类型。例如,不允许进行以下转 换,并会返回错误:
CREATE TABLE newemp (name BINARY) PARTITION BY RANGE(name)
(p1 VALUES <= ("Maarten"), p2 VALUES <= ("Zymmerman")
• 在范围分区表中,不能将 NULL 用作界限。
• 如果分区键第一列中的单元格值计算结果为 NULL,则对应行将属于第一个分 区。SAP Sybase IQ 仅支持一列分区键,因此分区键中的任何 NULL 都会将对 应行分配到第一个分区。
• PARTITION BY HASH – 基于内部散列函数处理的分区-键值向各个分区映射数 据。散列分区键被限定为最多有 8 个列,其声明的列宽总和小于等于 5300 个字 节。对于散列分区,表创建者仅确定分区键列;分区的数量和位置将在内部确定。
在散列分区声明中,分区键是一个或多个列,其合成值将确定存储有各行数据的 分区:
hash-partitioning-scheme:
HASH ( partition-key [ , partition-key, … ] )
• 限制 –
• 只能对基表进行散列分区。试图对全局临时表或局部临时表进行分区将会 引发错误。
• 不能添加、删除、合并或拆分散列分区。
• 不能为散列分区键添加列或从中删除列。
• PARTITION BY HASH RANGE – 按范围对已进行散列分区的表划分子分区。在 散列范围分区模式声明中,SUBPARTITION BY RANGE 子句将向现有散列范围 分区表添加一个新的范围子分区:
hash-range-partitioning-scheme:
PARTITION BY HASH ( partition-key [ , partition-key, … ] )
[ SUBPARTITION BY RANGE ( range-partition-decl [ , range- partition-decl ... ] ) ]
散列分区指定如何在逻辑上分布和托管数据;范围子分区指定如何在物理上放置 数据。新的范围子分区通过散列进行逻辑分区,其散列分区键与现有的散列范围 分区表相同。范围子分区键被限定为仅一列。
• 限制 –
• 只能对基表进行散列分区。试图对全局临时表或局部临时表进行分区将会 引发错误。
• 不能添加、删除、合并或拆分散列分区。
• 不能为散列分区键添加列或从中删除列。
注意: 与散列范围分区相同,范围分区和复合分区模式要求有单独授权的 VLDB
管理组件。
(返回顶部) (第 410 页)
• 示例 1 – 创建一个名为 SalesOrders2 的表,其中包含 5 列。 FinancialCode、OrderDate 和 ID 列的数据页位于 dbspace Dsp3 中。整数列 CustomerID 的数据页位于 dbspace Dsp1 中。CLOB 列 History 的数据页位于 dbspace Dsp2 中。主键(ID 的 HG)的数据页位于 dbspace Dsp4 中:
CREATE TABLE SalesOrders2 ( FinancialCode CHAR(2), CustomerID int IN Dsp1,
History CLOB IN Dsp2, OrderDate TIMESTAMP, ID BIGINT,
PRIMARY KEY(ID) IN Dsp4
) IN Dsp3
• 示例 2 – 创建一个名为 fin_code2 的表,其中包含 4 列。code、type 和 id 列的数据页位于数据库选项 DEFAULT_DBSPACE 的值所确定的缺省 dbspace 中。 CLOB 列 description 的数据页位于 dbspace Dsp2 中。外键 fk1(c1 的 HG)中 的数据页位于 dbspace Dsp4 中:
CREATE TABLE fin_code2 ( code INT,
type CHAR(10),
description CLOB IN Dsp2, id BIGINT,
FOREIGN KEY fk1(id) REFERENCES SalesOrders(ID) IN Dsp4
)
• 示例 3 – 创建表 t1,其中分区 p1 与 p2 相邻,分区 p2 与 p3 相邻:
CREATE TABLE t1 (c1 INT, c2 INT) PARTITION BY RANGE(c1)
(p1 VALUES <= (0), p2 VALUES <= (10), p3 VALUES <= (100))
• 示例 4 – 创建包含 6 列和 3 个分区的 RANGE 分区表 bar,用于基于日期向各个 分区映射数据:
CREATE TABLE bar (
c1 INT IQ UNIQUE(65500), c2 VARCHAR(20),
c3 CLOB PARTITION (P1 IN Dsp11, P2 IN Dsp12, P3 IN Dsp13),
c4 DATE,
c5 BIGINT,
c6 VARCHAR(500) PARTITION (P1 IN Dsp21, P2 IN Dsp22),
PRIMARY KEY (c5) IN Dsp2) IN Dsp1 PARTITION BY RANGE (c4)
(P1 VALUES <= ('2006/03/31') IN Dsp31, P2 VALUES <= ('2006/06/30') IN Dsp32, P3 VALUES <= ('2006/09/30') IN Dsp33
) ;
每个分区的数据页分配:
分区 |
Dbspace |
列 |
P1 |
Dsp31 |
c1、c2、c4、c5 |
P1 |
Dsp11 |
c3 |
P1 |
Dsp21 |
c6 |
P2 |
Dsp32 |
c1、c2、c4、c5 |
分区 |
Dbspace |
列 |
P2 |
Dsp12 |
c3 |
P2 |
Dsp22 |
c6 |
P3 |
Dsp33 |
c1、c2、c4、c5、c6 |
P3 |
Dsp13 |
c3 |
P1、P2、P3 |
Dsp1 |
c1 的查找存储和其它共享数据 |
P1、P2、P3 |
Dsp2 |
主键(c5 的 HG) |
• 示例 5 – 创建包含 PRIMARY KEY(列 c1)和 HASH PARTITION KEY(列 c4 和 c3)的 HASH 分区表 ( table tbl42 )。
CREATE TABLE tbl42 (
c1 BIGINT NOT NULL,
c2 CHAR(2) IQ UNIQUE(50), c3 DATE IQ UNIQUE(36524), c4 VARCHAR(200),
PRIMARY KEY (c1)
)
PARTITION BY HASH ( c4, c3 )
• 示例 6 – 创建含有 PRIMARY KEY(列 c1)、散列分区键(列 c4 和 c2)和范围 子分区键(列 c3)的散列范围分区表。
CREATE TABLE tbl42 (
c1 BIGINT NOT NULL,
c2 CHAR(2) IQ UNIQUE(50), c3 DATE,
c4 VARCHAR(200),
PRIMARY KEY (c1)) IN Dsp1
PARTITION BY HASH ( c4, c2 ) SUBPARTITION BY RANGE ( c3 )
( P1 VALUES <= (2011/03/31) IN Dsp31, P2 VALUES <= (2011/06/30) IN Dsp32,
P3 VALUES <= (2011/09/30) IN Dsp33) ;
• 示例 7 – 为图书馆数据库创建用于保存借出图书信息的表:
CREATE TABLE borrowed_book ( date_borrowed DATE NOT NULL, date_returned DATE,
book CHAR(20)
REFERENCES library_books (isbn), CHECK( date_returned >= date_borrowed )
)
• 示例 8 – 在远程服务器 SERVER_A 上创建表 t1,并创建映射到该远程表的名为 t1
的代理表:
CREATE TABLE t1 ( a INT,
b CHAR(10))
AT 'SERVER_A.db1.joe.t1'
• 示例 9 – 创建表 tab1,其中包含以特殊常量 LAST USER 为缺省值的列 c1:
CREATE TABLE tab1(c1 CHAR(20) DEFAULT LAST USER)
• 示例 10 – 创建包含列 c1 的局部临时表 tab1:
CREATE LOCAL TEMPORARY TABLE tab1(c1 int) IN IQ_SYSTEM_TEMP
在以下情况下,本例将在 IQ_SYSTEM_TEMP dbspace 中创建 tab1:
• DQP_ENABLED 逻辑服务器策略选项设置为 ON,但在 IQ_SHARED_TEMP 中 没有读写文件
• DQP_ENABLED 选项为 OFF,TEMP_DATA_IN_SHARED_TEMP 逻辑服务器策 略选项为 ON,但在 IQ_SHARED_TEMP 中没有读写文件
• DQP_ENABLED 选项和 TEMP_DATA_IN_SHARED_TEMP 选项均设置为 OFF
在以下情况下,本例将在 IQ_SHARED_TEMP dbspace 中创建相同的表 tab1:
• DQP_ENABLED 设置为 ON,且在 IQ_SHARED_TEMP 中具有读写文件
• DQP_ENABLED 设置为 OFF,TEMP_DATA_IN_SHARED_TEMP 设置为 ON, 且在 IQ_SHARED_TEMP 中具有读写文件
• 示例 11 – 创建表 tab1,允许在内存 RLV 存储库中使用行级版本控制和实时存 储。
CREATE TABLE tab1 ( c1 INT, c2 CHAR(25) ) ENABLE RLV STORE
用法
(返回顶部) (第 410 页)
通过指定所有者名称,可为其他用户创建表。如果未指定 GLOBAL TEMPORARY 或 LOCAL TEMPORARY,该表被称为基表。否则,该表为临时表。
与基表一样,所创建的全局临时表也存在于数据库中,并一直保留在数据库中,直到 通过 DROP TABLE 语句将其显式删除。临时表中的行仅对插入这些行的连接可见。 来自相同或不同应用程序的多个连接可同时使用同一个临时表,但每个连接只能看到 它自己的那些行。给定的连接会继承当该连接首次引用全局临时表时该表的模式。连 接结束时会删除临时表中的行。
创建局部临时表时,请不要指定所有者。如果在创建临时表时指定所有者(例如,
CREATE TABLE dbo.#temp(col1 int)),就会将其错误地创建成基表。 如果连接中存在某一局部临时表,则尝试创建同名的基表或全局临时表将失败,因为
owner.table 无法唯一地标识新表。
但是,当存在基表或全局临时表时,可创建同名的局部临时表。引用表名时将访问局 部临时表,因为将首先解析局部临时表。
例如,请考虑以下序列:
CREATE TABLE t1 (c1 int); INSERT t1 VALUES (9);
CREATE LOCAL TEMPORARY TABLE t1 (c1 int); INSERT t1 VALUES (8);
SELECT * FROM t1;
返回的结果为 8。对 t1 的任何引用都将引用局部临时表 t1,一直到局部临时表被连 接删除。
在过程中,如果要创建一个在过程完成后仍然保留的表,可使用 CREATE LOCAL TEMPORARY TABLE 语句,而不是 DECLARE LOCAL TEMPORARY TABLE 语句。
使用 CREATE LOCAL TEMPORARY TABLE 语句创建的局部临时表会一直保留到它 被显式删除或连接终止。
利用使用 CREATE LOCAL TEMPORARY TABLE 的 IF 语句创建的局部临时表,在 IF
语句完成后也会继续保留。
SAP Sybase IQ 不支持将 CREATE TABLE ENCRYPTED 子句用于对 SAP Sybase IQ 表 进行表级别加密。但 SAP Sybase IQ 数据库中的 SQL Anywhere 表支持 CREATE TABLE ENCRYPTED 子句。
Side Effects
• 自动提交
(返回顶部) (第 410 页)
• SQL - ISO/ANSI SQL 语法的服务商扩充。 以下是服务商扩充:
• { IN | ON } dbspace-name 子句
• ON COMMIT 子句
• 部分缺省值
• SAP Sybase 数据库产品 - 受 Adaptive Server 支持,但存在一些差异。
• 临时表 – 通过在 CREATE TABLE 语句中的表名前加上井号 (#),可创建临时 表。这些临时表是 SAP Sybase IQ 声明的临时表,只能在当前连接中可用。有 关声明的临时表的信息,请参见 DECLARE LOCAL TEMPORARY TABLE 语 句。
• 实际放置 – SAP Sybase IQ 中表的实际放置方式不同于 Adaptive Server 中表的 实际放置方式。Adaptive Server 支持的 ON segment-name 子句在 SAP Sybase IQ 中也受支持,但 segment-name 指的是 IQ dbspace。
• 约束 – SAP Sybase IQ 不支持已命名的约束或已命名的缺省值,但确实支持允 许将约束和缺省值定义封装在数据类型定义中的用户定义数据类型。它还支持在 CREATE TABLE 语句中使用显式缺省值和 CHECK 条件。
• NULL – (缺省值)缺省情况下,Adaptive Server 中的列缺省设置为 NOT NULL,而在 SAP Sybase IQ 中,缺省设置为 NULL,从而允许 NULL 值。可使用 ALLOW_NULLS_BY_DEFAULT 选项控制此设置。请参见 ALLOW_NULLS_BY_DEFAULT 选项 [TSQL]。要使您的数据定义语句成为可 移植的语句,应显式指定 NULL 或 NOT NULL。
(返回顶部) (第 410 页)
表类型 |
所需特权 |
IQ 主存 |
自有表 - 针对创建表的 dbspace 需要具备 CREATE 特权。还需要具备以下特权之 |
储库中 |
一: |
的基表 |
• CREATE TABLE 系统特权。 |
• CREATE ANY OBJECT 系统特权。 |
|
由任何用户拥有的表 - 需要对创建表的 dbspace 具有 CREATE 特权。还需要具备 |
|
以下特权之一: |
|
• CREATE ANY TABLE 系统特权。 |
|
• CREATE ANY OBJECT 系统特权。 |
|
全局临 |
由自身拥有的表 – 需要具备以下特权之一: |
时表 |
• CREATE TABLE 系统特权。 |
• CREATE ANY OBJECT 系统特权。 |
|
由任何用户拥有的表 – 需要具备以下特权之一: |
|
• CREATE ANY TABLE 系统特权。 |
|
• CREATE ANY OBJECT 系统特权。 |
|
代理表 |
由自身拥有的表 – 需要具备以下特权之一: • CREATE PROXY TABLE 系统特权。 • CREATE ANY TABLE 系统特权。 • CREATE ANY OBJECT 系统特权。 由任何用户拥有的表 – 需要具备以下特权之一: • CREATE ANY TABLE 系统特权。 • CREATE ANY OBJECT 系统特权。 |
另请参见
• 限制 (第 126 页)
• 范围分区 (第 127 页)
• 散列分区 (第 128 页)
• 散列范围分区 (第 129 页)
Sybase SQL Anywhere数据库恢复工具ReadASADB:
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。
Sybase SQL Anywhere数据库恢复工具ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具
- 适用于所有的SQL Anywhere版本 包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.x
- 适用于所有的UltraLite版本
- 能够恢复出来表结构和数据
- 能够恢复自定义数据类型
- 能够恢复存储过程等对象的语法
- 能够导出到目标数据库
- 能够导出到SQL文件并生成导入脚本
- 支持多种字符集,包括:cp850、cp936、gb18030、utf8等
- 能够恢复未加密或者简单加密类型的数据
- 简单易用
- 限制:不支持AES加密的数据文件
SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍
Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景
各种误操作:
- 误截断表(truncate table)
- 误删除表(drop table)
- 错误的where条件误删数据
- 误删除db或log文件
- 误删除表中的字段
Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:
1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back
Sybase ASE数据库恢复工具READSYBDEVICE:
一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。
Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:
- 被勒索病毒加密数据文件及备份文件情况下的恢复;
- 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
- 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
- delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
- 各种Sybase内部系统表损坏、索引错误的修复;
- master数据库损坏而无法正常运行情况下的恢复;
- Sybase数据库被标记为可疑,不可用等情况的恢复;
- Sybase数据库中数据文件内部出现坏块情况下的恢复;
- Sybase数据库无数据文件但有日志文件的情况下的恢复;
- Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
- Sybase数据文件被误删除情况下的碎片提取恢复;
- 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
- 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
- Sybase数据库还原数据库出现失败情况下的恢复;
- Sybase数据库只剩下损坏的备份文件情况下的恢复。
Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:
Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.xSQL Server数据库恢复工具SQLRescue:
一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。
SQL Server数据库恢复工具SQLRescue的主要功能:
- 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
- 断电导致数据库文件损坏情况下的恢复;
- 硬盘坏道造成数据库损坏情况下的恢复;
- 数据文件内部存在坏页情况下的恢复;
- 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
- 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
- 无法读取并闩锁页sysindexes失败情况下的修复;
- 数据文件被误删除情况下的碎片提取恢复;
- 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
- master数据库损坏而无法正常运行情况下的恢复;
- 数据文件无法附加情况下的数据恢复;
- 数据库被标记为可疑,质疑,不可用等情况的恢复;
- 数据库sysobjects等系统表损坏情况下的恢复;
- 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
- 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
- 数据库被误格式化等情况下的数据库恢复;
- 日志收缩造成数据库损坏情况下的恢复;
- 仅剩损坏的备份文件情况下的恢复。
SQL Server数据库恢复工具SQLRescue技术特点:
只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。- 从数据文件中直接恢复数据
- 不能附加时直接恢复数据并生成新的数据库
- 系统表损坏的数据库修复
- 快速修复SQL 823错误、连接中断错误
SQL Server数据库恢复工具SQLRescue支持的版本:
Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。+-------------------------------------华丽的分割线-------------------------------------------------------------------------