《SQL Anywhere Studio 9开发指南》详细介绍了基于SQL Anywhere Studio 9的数据库开发方法,按典型数据库生命周期内执行任务的顺序,分十个章节,依次介绍了创建、插入、查询、更新、删除、读取、同步、打包、保护、调优。并引用大量示例加以说明。该书内容丰富,值得数据库相关人员学习和参考。
第1章 创建 1
1.1 简介 1
1.2 关系数据库的CODD氏12大规则 3
1.3 五种表类型 5
1.4 全局永久表 6
1.5 数据类型 8
1.5.1 字符串即字符串:BINARY、CHARACTER、LONG 8
1.5.2 日期和时间 10
1.5.3 精确小数 11
1.5.4 浮点数 12
1.5.5 二进制整数 13
1.5.6 文字 14
1.6 列属性 15
1.7 计算列 16
1.8 DEFAULT值 18
1.8.1 DEFAULT AUTOINCREMENT 18
1.8.2 DEFAULT GLOBAL AUTOINCREMENT 19
1.8.3 文字缺省值 21
1.8.4 特殊更新值 22
1.8.5 表达式作为缺省值 23
1.9 NULL属性 23
1.10 列约束 24
1.10.1 NOT NULL约束 25
1.10.2 CHECK列约束 25
1.10.3 PRIMARY KEY列约束 26
1.10.4 外键列约束 26
1.10.5 UNIQUE列约束 28
1.11 用户定义数据类型 28
1.12 可用空间 30
1.13 表约束 31
1.13.1 CHECK表约束 31
1.13.2 PRIMARY KEY表约束 31
1.13.3 FOREIGN KEY表约束 32
1.13.4 UNIQUE 表约束 34
1.14 远程数据访问 34
1.14.1 CREATE SERVER 36
1.14.2 CREATE EXTERNLOGIN 36
1.14.3 创建远程和代理表 37
1.14.4 CREATE EXISTING TABLE 38
1.15 临时表 40
1.15.1 全局临时表 40
1.15.2 局部临时表 42
1.16 规范化设计 46
1.16.1 第一范式 47
1.16.2 第二范式 47
1.16.3 第三范式 48
1.16.4 Boyce-Codd 范式 49
1.16.5 第四范式 51
1.16.6 第五范式 52
1.17 本章小结 54
第2章 插入 55
2.1 简介 55
2.2 INSERT 56
2.2.1 插入所有值 56
2.2.2 插入命名的值 58
2.2.3 插入所有已选列 59
2.2.4 插入特选列表 61
2.2.5 插入自动命名的列表 62
2.3 LOAD TABLE 63
2.4 ISQL INPUT 72
2.5 本章小结 77
第3章 查询 78
3.1 简介 78
3.2 SELECT的逻辑执行 79
3.3 FROM子句 91
3.4 JOIN 93
3.4.1 CROSS JOIN 93
3.4.2 INNER JOIN 94
3.4.3 LEFT OUTER JOIN 95
3.4.4 RIGHT OUTER JOIN 96
3.4.5 FULL OUTER JOIN 97
3.5 派生表 99
3.6 多表连接 102
3.7 SELECT FROM过程调用 108
3.8 横向(LATERAL)过程调用 112
3.9 SELECT列表 114
3.10 表达式和运算符 116
3.10.1 IF和CASE表达式 119
3.11 15个最重要的内置标量函数 122
3.12 布尔表达式和WHERE子句 128
3.12.1 比较谓词 131
3.12.2 EXISTS谓词 133
3.12.3 IN谓词 135
3.12.4 BETWEEN谓词 136
3.12.5 NULL测试谓词 136
3.12.6 LIKE谓词 137
3.12.7 触发器谓词 139
3.13 GROUP BY子句 140
3.14 集合函数调用 142
3.15 GROUP BY ROLLUP子句 149
3.16 HAVING子句 153
3.17 ORDER BY子句 154
3.18 SELECT DISTINCT 156
3.19 FIRST和TOP 157
3.20 NUMBER(*) 158
3.21 INTO子句 160
3.22 UNION、EXCEPT和INTERSECT 161
3.23 CREATE VIEW 166
3.24 WITH子句 169
3.24.1 递归联合 171
3.25 UNLOAD TABLE和UNLOAD SELECT 178
3.26 ISQL OUTPUT 183
3.27 本章小节 188
第4章 更新 190
4.1 简介 190
4.2 单行UPDATE 190
4.3 多行UPDATE 192
4.4 集合UPDATE的逻辑执行 193
4.4.1 集合UPDATE 198
4.5 在游标中使用UPDATE WHERE CURRENT OF 201
4.6 本章小结 204
第5章 删除 205
5.1 简介 205
5.2 单行删除 205
5.3 多行删除 206
5.4 集合删除的逻辑执行 207
5.4.1 集合删除 210
5.5 在游标中使用DELETE WHERE CURRENT OF 214
5.6 TRUNCATE TABLE 215
5.7 本章小结 220
第6章 读取 221
6.1 简介 221
6.2 游标FETCH循环 221
6.2.1 DECLARE CURSOR FOR SELECT 225
6.2.2 DECLARE CURSOR USING SELECT 230
6.2.3 DECLARE CURSOR FOR CALL 232
6.2.4 OPEN、CLOSE游标 233
6.2.5 FETCH游标 234
6.3 游标FOR循环 235
6.4 本章小结 237
第7章 同步 239
7.1 简介 239
7.2 MOBILINK的工作方式 240
7.3 MOBILINK ASA客户端 244
7.4 MOBILINK客户端安装 245
7.4.1 CREATE PUBLICATION 246
7.4.2 CREATE SYNCHRONIZATION USER 247
7.4.3 CREATE SYNCHRONIZATION SUBSCRIPTION 249
7.4.4 DBMLSYNC命令行 250
7.4.5 SYSSYNC和发布缺省值 254
7.5 MOBILINK服务器 256
7.6 MOBILINK服务器安装 257
7.6.1 连接级脚本 258
7.6.2 会话级脚本 259
7.6.3 表级脚本 261
7.6.4 行级脚本 262
7.7 MOBILINK系统表 286
7.8 MOBILINK监控器 290
7.9 本章小结 292
第8章 打包 293
8.1 简介 293
8.2 BEGIN块 293
8.3 异常处理 296
8.4 赋值语句 299
8.5 IF语句 300
8.6 CASE语句 301
8.7 WHILE循环 303
8.8 EXECUTE IMMEDIATE 304
8.9 CREATE PROCEDURE、CALL和RETURN 307
8.10 CREATE FUNCTION 315
8.11 CREATE TRIGGER 319
8.12 CREATE EVENT 329
8.13 TRIGGER EVENT 338
8.14 CREATE VARIABLE 342
8.15 本章小结 343
第9章 保护 344
9.1 简介 344
9.2 选项 345
9.3 事务 350
9.4 保存点与子事务 358
9.5 错误处理 362
9.5.1 SIGNAL与RESIGNAL 362
9.5.2 RAISERROR与CREATE MESSAGE 366
9.5.3 ROLLBACK TRIGGER 372
9.6 锁定 375
9.7 阻塞与隔离级别 379
9.7.1 隔离级别0 379
9.7.2 隔离级别1 383
9.7.3 隔离级别2 386
9.7.4 隔离级别3 389
9.8 死锁 395
9.9 互斥 400
9.10 授权连接 402
9.10.1 表特权 406
9.10.2 视图特权 409
9.10.3 执行特权 410
9.10.4 特殊特权 412
9.10.5 GRANT GROUP 414
9.11 记录与恢复 417
9.12 备份 421
9.12.1 完全脱机映像备份 421
9.12.2 完全联机映像备份 423
9.12.3 差分联机日志备份 426
9.12.4 增量联机日志备份 427
9.12.5 活动日志备份 428
9.13 恢复 430
9.14 校验 436
9.15 本章总结 440
第10章 调优 442
10.1 简介 442
10.2 请求级记录 443
10.3 索引顾问 453
10.4 执行分析工具 457
10.5 图形式计划 460
10.6 碎片和重组 465
10.6.1 文件碎片 466
10.6.2 表碎片 468
10.6.3 表重组 473
10.6.4 索引碎片 474
10.6.5 索引重组 477
10.6.6 使用卸载/重载进行数据库重组 478
10.7 CREATE INDEX 483
10.8 数据库性能计数器 489
10.9 提示和技巧 493
10.10 本章小结 500
《SQL Anywhere Studio 9开发指南》序
作为移动计算技术核心组件之一的Sybase SQL Anywhere Studio 9是一款功能全面的软件包,它提供了数据管理和企业同步技术,可实现移动、工作组以及嵌入式数据库解决方案的快速开发与部署。它秉承了SQL Anywhere Studio以往的优良特性,继续提供小如指印又具有企业级功能的数据库,并将企业信息扩展到任何地方——使“永远可用”的移动计算技术真正成为可能。
放眼望去,SQL Anywhere Studio在市场上所向披靡,无一与其竞争的产品。SQL Anywhere Studio已连续六年持续占有全球移动数据库市场份额73%。其中的理由既简单又充分:它成就了信息无处不在的梦想,让数据更加智能,更加灵活机动,也比以往更具价值;通过灵活高效的同步计算技术,它创造了数据的移动性和流动性;与企业信息管理的平台一道,Sybase真正传递了企业的无限信息!SQL Anywhere Studio支持着中石化全国的加油站、助力光明乳业和平安保险构建移动销售平台、使顾客在韩国现代百货体验超凡购物乐趣…我们没有理由不相信SQL Anywhere Studio能将我们带入美妙的移动未来。
本书的作者Breck Carter先生是Team Sybase中经验丰富的数据库专家,他对SQL Anywhere Studio深入的了解能帮助你解决SQL Anywhere Studio开发中的遇到的问题。把本书中的技巧应用到你的开发过程中,必将迅速提升你的开发经验,让你胜人一筹,并最终将你带入新的开发时代!
在此,我还想感谢Sybase中国iAnywhere开发人员计划、远在加拿大的iAnywhere文档组成员、电子工业出版社计算机图书事业部(博文视点资讯有限公司)和中国软件网(CSDN)。正是他们的辛勤劳动才为你掀开了这灿烂的篇章!
Sybase软件(中国)有限公司总裁兼Financial Fusion亚洲区副总裁
俞伟强
2005年12月
SQL Anywhere能占据70%以上的移动数据库市场份额自有其中的道理。事实上,SQL Anywhere的制胜法宝很多:易于使用、易于管理,不会占用太大空间。如果您希望部署数百,甚至数千个数据库,这些都是必不可少的;如果要在数万个路由器、交换机或其他硬件设备内嵌入关系数据库,这些优势就显得更为重要了。
当然,SQL Anywhere不仅可以用于移动和嵌入式数据库;它还可用作网络服务器,供数百位用户不断访问单一数据库,具有强大的功能和灵活性。另外,从二十世纪八十年代的Watcom,到二十世纪九十年代的Powersoft和Sybase,再到新千年的iAnywhere Solutions,使它具有了悠久的历史和坚实的基础。
多年以来,SQL Anywhere开发团队一贯秉承我们的核心价值;正如VMI Communication and Learning Systems的Richard Williams宣称的那样,“Watcom所做的正是他们应该做的。”
以下简要介绍SQL Anywhere Studio Version 9的发展历史:
1965年:滑铁卢大学(University of Waterloo)首次为IBM 7040开发了WATFOR FORTRAN编译器。
1981年:Watcom公司宣告成立。
1988年:作为Watcom Information Workbench的一部分,PACEBase SQL Database System正式发布。它运行于使用DOS的PC之上,包括ISQL、事务处理、声明的参照完整性、CREATE TABLE和ALTER TABLE语句、内连接、SELECT列表中的子查询、多个用户ID以及用于恢复的单独回滚文件。这是“版本1”,但从未发布过“版本2”。
1992年:Watcom SQL 3成为商用软件。它是多用户服务器,具有行级锁定功能、单独的事务日志和多表更新。此后的版本陆续增加了Windows 3 支持、ODBC驱动程序、外部连接、默认值、检查约束、时间、日期、长数据类型和联机备份。
1993年:Powersoft在PowerBuilder 3中集成了Watcom SQL 3.2。
1994年:Powersoft收购了Watcom。
1994年:Watcom SQL 4正式发布。它包括存储过程、触发器、级联更新和删除、临时表、一个服务器上的多个数据库、自调节查询优化器和TCP/IP支持。
1995年:Sybase收购了Powersoft。
1995年:SQL Anywhere 5正式发布。它包括SQL Remote、SQL Central(即今天的Sybase Central)、Transact SQL语法以及对Sybase Replication Server的支持。
1996年:SQL Anywhere 5.5作为捆绑产品正式发布,其中包括InfoMaker、Netlmpact Dynamo(即以后的PowerDynamo)和用于Sybase Central的插件体系结构。
1998年:SQL Anywhere 6正式发布,引擎采用了新名称“Adaptive Server Anywhere”,捆绑产品命名为“SQL Anywhere Studio”,现已包括在 SQL Modeler(后来改为 PowerDesigner)之中。SQL Anywhere 6 版本在数据库中引入了Java,以后的版本中增加了代理表、UltraLite部署选项、MobiLink同步和交互式调试程序。
2000年:SQL Anywhere 7正式发布。它增加了支持将ASA数据库作为MobiLink远程数据库,改善UltraLite 、OLEDB驱动程序和动态调整高速缓存大小等功能。版本7中还引进了Java版本的ISQL和Sybase Central。
2000年:iAnywhere Solutions, Inc.正式成立,成为了Sybase的一个子公司。
2001年:SQL Anywhere 8正式发布。此版本包括数百个升级,但最重要的更新还是查询引擎:SQL Anywhere 8完全重写了查询引擎,以提高性能并支持将来的升级。
2003年:SQL Anywhere 9正式发布。它结合了更多的新功能,其中包括更多的性能改进、索引顾问、OLAP、XML和64位处理器支持以及众多的SQL功能(包括FROM子句中的递归联合和存储过程调用)。
在未来几年内,随着计算机和硬盘驱动器价格的不断下降以及SQL Anywhere 性能和功能不断提高,SQL Anywhere将会用于更大、更复杂的应用程序。本书致力于推动这一美好前景的早日实现;我们相信,无论是数据库设计师还是应用程序开发员,您都会希望探索SQL Anywhere并充分发挥它的功能。
本书分为10章,每章都用一个动词作为标题,编排顺序大致符合在典型数据库生命周期内执行的任务:
1.创建
2.插入
3.查询
4.更新
5.删除
6.读取
7.同步
8.打包
9.保护
10.调优
第1章“创建”首先介绍Codd的12大规则;这些规则全面描述了类似SQL Anywhere的关系数据库管理系统应该是什么样子。然后,本章会介绍SQL Anywhere使用的五种不同的表:全局永久表、全局临时表、局部临时表、远程表和代理表。第1章还包括数据类型、列属性(如 DEFAULT)、列和表约束(如 CHECK和FOREIGN KEY),最后对规范化设计做了初步讨论。
第2章“插入”讲述如何向数据库中放置数据,介绍了五种不同风格的 INSERT以及LOAD TABLE语句和ISQL的客户端替代语句,INPUT语句。
第3章“查询”讲述的内容恰好与第2章相对应,主要介绍使用SELECT、UNLOAD和ISQL OUTPUT语句从数据库中取出数据。作为本书中最长的一章,其实也很自然:因为SQL SELECT语句也许是任何编程语言使用的最强大、最复杂的单一语义结构了。
第3章开头首先对SELECT语句做了详尽说明;然后介绍SELECT的逻辑执行,这里主要阐述的是各种子句如何相互组合、共同生成最终的结果集,读者不必考虑SQL Anywhere具体如何执行SELECT;其后又详细讲解了本章开头部分介绍的各种步骤。如果您曾在使用GROUP BY子句时遇到麻烦,比如:执行的SELECT返回了10 000行,而非需要的3行,或者纳闷自己为什么不能在WHERE子句内调用NUMBER(*),请仔细阅读本章。
第4章“更新”介绍UPDATE语句,以及如何用它更新一个表内的单行、多行,甚至是多个表内的多个行。本章中的一节还将介绍集合UPDATE的逻辑执行,并讨论使用WHERE CURRENT OF子句的游标UPDATE语句。
第5章“删除”与第 4 章相对应,讨论如何删除单一行和多个行;其中一节还将介绍集合DELETE的逻辑执行,以及使用WHERE CURRENT OF的游标DELETE语句的相关信息。第5章中还有一节是关于TRUNCATE TABLE的,它将TRUNCATE TABLE与DELETE做了一番对比:有时会更快,有时则不会,究竟是为什么。
第6章“读取”讨论DECLARE、OPEN、FETCH和CLOSE语句,它们适用于利用SELECT查询和过程调用的游标。本章还将介绍FOR游标循环,它无需 DECLARE所有局部变量或对那些无穷无尽的FETCH列表进行编码,极大地简化了SQL中的游标循环。
第7章“同步”专门介绍MobiLink,讨论MobiLink服务器如何与ASA的MobiLink客户端配合使用,在统一数据库和数十或数千个远程数据之间来回同步数据。MobiLink脚本按级别(连接、会话、表和行)和方向(上载和下载)分类。此外,本章还将介绍服务器和客户端侧的错误处理。
第8章“打包”条论如何使用BEGIN块和基于BEGIN块的SQL模块,将应用程序逻辑移至数据库中:设计过程、触发器和事件。本章将介绍SET赋值语句,以及控制流结构IF、CASE和WHILE、EXECUTE IMMEDIATE语句和连接级CREATE VARIABLE语句。本章还将介绍异常处理的基础知识,这一主题将延伸到第9章。
第9章“保护”是本书中第二长的章节,其中将探讨各种主题,包括选项、事务、异常、错误、子事务、锁定、块、隔离级别、死锁、互斥、用户ID、权限、用户组、记录、恢复、备份、还原以及(天啊!)数据库校验。其中的许多主题之间的联系很松散,但都归在了通用主题“崩溃、Bashing, 推敲和此后的保护”之下。
第10章“调优”也许是最受读者关注的一章。因为大家关心的是速度!速度!还是速度!但本章却被作者放在最后,这是因为优化的第一条规则就是“不要这么做”。如果您是这方面的专家,第二条规则同样适用:“时机未到!”
第10章首先讲解SQL Anywhere提供的四个重要的性能调优工具:请求级记录、索引顾问、执行配置文件和图形式计划。接下来,介绍的是几个容易被读者忽略的问题,如文件、表和索引碎片以及表、索引和数据库重组等。另外,本章还包括有关CREATE INDE
无封面