远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

delete

说明 删除表中的行。

语法 delete

[top unsigned_integer]

[from] [[database.]owner.]{view_name|table_name} [where search_conditions]

[plan "abstract plan"]

delete [[database.]owner.]{table_name | view_name} [from [[database.]owner.]{view_name [readpast]|

table_name

[(index {index_name | table_name} [prefetch size][lru|mru])]}

[readpast]

[, [[database.]owner.]{view_name [readpast]|

table_name

[(index {index_name | table_name} [prefetch size][lru|mru])]

[readpast]} ...] [where search_conditions]] [plan "abstract plan"]

delete [from] [[ database.]owner.]{table_name|view_name} where current of cursor_name

参数 from (after delete)

是用于与其它版本的 SQL 兼容的可选关键字。

view_name | table_name 是从其中删除行的视图或表的名称。如果该视图或表位于另一数据库 中,请指定该数据库名称;如果在数据库中有多个具有该名称的视图 或表,请指定所有者的名称。 owner 的缺省值是当前用户,而 database 的缺省值是当前数据库。

where

是标准 where 子句。有关详细信息,请参见 where 子句

from table_name view_name 后) 允许在指定删除哪些行时指定要用于 where 子句的多个表或视图。此 from 子句允许您根据存储在其它表中的数据删除一个表中的行,从而 给予您嵌入式 select 语句的大部分能力。

top unsigned_integer

用于将行数限制为 unsigned_integer 指定的行数。


readpast

指定 delete 命令跳过持有不兼容锁的所有页或行,而不必等待锁或超 时。对于数据页锁定表, readpast 会跳过持有不兼容锁的页上的所有 行;对于数据行锁定表,它会跳过持有不兼容锁的所有行。

index index_name

指定访问 table_name 要使用的索引。当从视图中进行删除时不能使用 此选项。

prefetch size

为绑定到配置了大 I/O 的高速缓存的表指定 I/O 大小 (单位为千字 节)。从视图中进行删除时不能使用 prefetchsp_helpcache 显示对象 绑定到的高速缓存或缺省缓存的有效大小。

在使用 prefetch 并指定预取大小 ( size ) 时,最小值是 2K 或逻辑页大小 与 2 的任意次方的乘积 (最大为 16K)。 prefetch 大小选项如下 (以 千字节为单位):


逻辑页大小

预取大小选项

2

2, 4, 8 16

4

4, 8, 16, 32

8

8, 16, 32, 64

16

16, 32, 64, 128


在查询中指定的 prefetch 大小仅仅是一个建议。要使用指定的大小, 应将数据高速缓存按该大小进行配置。如果未将数据高速缓存配置为 特定的大小,则使用缺省的 prefetch 大小。

若要配置数据高速缓存大小,请使用 sp_cacheconfigure

image

image

注释 如果启用 CIS,则不能对远程服务器使用 prefetchlru | mru

指定对表使用的缓冲区替换策略。使用 lru 强制优化程序将表读入 MRU/LRU (最近使用最多的/最近使用最少的)链上的高速缓存。使 用 mru 可放弃高速缓存中的缓冲区,并将其替换为该表的下一个缓冲 区。当从视图中进行删除时不能使用此选项。

plan "abstract plan" 指定用来优化查询的抽象计划。它可以是用抽象计划语言指定的完整 或部分计划。请参见 《性能和调优指南:优化程序和抽象计划》中 的 “创建和使用抽象计划”。


where current of cursor_name

导致 Adaptive Server 删除 cursor_name 的当前游标位置指示的表或视 图中的行。

示例 示例 1 删除 authors 表中的所有行:

delete authors

示例 2 删除 authors 表中的一行或多行:

delete from authors where au_lname = "McBadden"

示例 3 删除 titles 表中作者为 Bennet 的书的行。

delete titles

from titles, authors, titleauthor where authors.au_lname = 'Bennet'

and authors.au_id = titleauthor.au_id

and titleauthor.title_id = titles.title_id

pubs2 数据库包含一个阻止删除记录在 sales 表中的标题的触发器

(deltitle),若要使此示例能够工作,请删除此触发器。

示例 4 删除当前由游标 title_crsr 指示的 titles 表中的一行:

delete titles where current of title_crsr

示例 5 确定 IDENTITY 列的值为 4 的行并将其从 authors 表中删除。注意 用 syb_identity 关键字代替了 IDENTITY 列的实际名称:

delete authors where syb_identity = 4

示例 6 删除 authors 中的行,跳过所有锁定的行:

delete from authors from authors readpast where state = "CA"

示例 7 删除 stores 中的行,跳过所有锁定的行。如果 authors 中有锁定的 行,则查询会阻塞在这些行上,等待锁被释放:

delete stores from stores readpast, authors where stores.city = authors.city

用法 可在一条 delete 语句中引用多达 15 个表。

Adaptive Server 12.5.2 版之前的版本中,有时不用工作表就能解 析对视图执行的带有 union all 子句的 update delete 查询,这偶尔会 导致不正确的结果。在 Adaptive Server 12.5.2 及更高版本中,始终 使用 tempdb 中的工作表解析对带有 union all 子句的视图执行 update delete 的查询。


限制

不能在多表视图 ( from 子句指定多个表的视图)上使用 delete ,即 使可以在同一视图上使用 update insert。通过多表视图删除一行会 更改多个表,而这是不允许的。只影响视图的一个基表的 insert update 语句是允许的。

• Adaptive Server 将一个 delete 中同一表的两种不同名称作为两个表 对待。例如,下面在 pubs2 中发出的 delete 命令将 discounts 指定为 两个表 (discounts pubs2..discounts)

delete discounts

from pubs2..discounts, pubs2..stores where pubs2..discounts.stor_id =

pubs2..stores.stor_id

在这个例子中,连接中不包括 discounts,因此 where 条件对每一行 都为真;Adaptive Server 删除 discounts 中的所有行 (这并非期望的 结果)。若要避免此问题,请在整个语句中使用相同的表的名称。

如果要删除通过参照约束从其它表引用的表中的一行,允许删除前 Adaptive Server 会检查所有的引用表。如果试图删除的行包含一个 被引用表用作外键的主键,则不允许删除此行。

删除表中的所有行

如果不使用 where 子句,在 delete [from] 后命名的表中的所有行都将 被删除。表中虽然没有数据,但会一直存在,直到您发出 drop table 命令。

truncate table 和不指定行的 delete 就功能来说是相同的,但 truncate table 要更快。 delete 一次删除一行并记录这些事务。 truncate table 删 除整个数据页,且并不记录这些行。

delete truncate table 都回收由数据及其相关索引所占用的空间。

不能在分区表上使用 truncate tabl e 命令。若要删除分区表的所有行, 请使用不带 where 子句的 delete 命令,或在发出 truncate tabl e 之前取 消表的分区。

delete 和事务

在链式事务模式中,如果没有当前处于活动状态的事务,则每个 delete 语句会隐式地开始一个新的事务。请使用 commit 完成删除,或使用 rollback 撤消更改。例如:

delete from sales where date < 01/01/06if exists (select stor_id

from stores

where stor_id not in


(select stor_id from sales)) rollback transaction

else


commit transaction

此批处理会开始一个事务 (使用链式事务模式)并删除 sales 表中日期 早于 2006 1 1 日的行。如果它删除了与一个店铺相关的所有 sales 条目,则回退所有对 sales 的更改并结束事务。否则它提交删除并结束 事务。有关链式模式的详细信息,请参见 《Transact-SQL 用户指南》。

delete 触发器

可以定义一个触发器,从而在对指定表发出 delete 命令时执行指定的操 作。

使用 delete where current of

用游标使用子句 where current of。用子句 where current of 删除行之 前,先用 declare cursor 定义游标并用 open 语句将其打开。用一个或 多个 fetch 语句将游标定位到要删除的行上。游标名不能是

Transact-SQL 参数或局部变量。游标必须是可更新游标,否则 Adaptive Server 会返回错误。对游标结果集进行的任何删除操作也 会影响派生该游标行的基表行。使用游标时,每次只能删除一行。

如果游标的 select 语句中包含连接子句,那么即使游标是可更新 的,也不能删除游标结果集中的行。用 delete...where current of 指定 的 table_name view_name 必须是在定义该游标的 select 语句的第一 个 from 子句中指定的表或视图。

删除游标结果集中的一行后,游标定位在游标结果集中下一行的前 面。要访问下一行,必须发出 fetch 命令。如果删除的行是游标结果 集中的最后一行,则游标将被放置到结果集的最后一行之后。下面 描述了受 delete 影响的打开的游标的位置和行为:

如果客户端删除一行 (使用另一个游标或常规的 delete),而此 行代表此客户端所拥有的另一打开的游标的当前游标位置,则 隐式地设置每个受影响的游标的位置为下一可用行之前。但是, 客户端不能删除代表另一客户端游标的当前游标位置的行。

如果一个客户端删除一行,而此行代表由连接操作定义并由同 一客户端所拥有的另一游标的当前游标位置,则 Adaptive Server 接受此 delete 语句。但它会隐式地关闭由连接定义的游标。

使用 readpast

readpast 使得仅数据锁定表上的 delete 命令能够执行,而不会被其 它任务持有的不兼容锁阻塞。

在数据行锁定表中,readpast 会跳过共享、更新或排它锁由另一 任务所持有的所有行。


在数据页锁定表中,readpast 会跳过共享、更新或排它锁由另一 任务所持有的所有页。

有排它锁时指定 readpast 阻塞的命令。

如果为所有页锁定表指定了 readpast 选项,该选项将被忽略。一旦 发现不兼容锁,命令就会阻塞。

如果会话范围的隔离级别为 3,将自动忽略 readpast 选项。此命令 在级别 3 执行。此命令在任何带有不兼容锁的行或页上阻塞。

如果会话的事务隔离级别是 0,使用 readpast delete 命令将不会发 出警告消息。对于数据页锁定表,带有 readpast delete 将修改所 有页上没有被不兼容锁锁定的所有行。对于数据行锁定表,它影响 所有没有被不兼容锁锁定的行。

如果 delete 命令应用于带有两个或多个文本列,并且每个文本列都 有一个不兼容的锁的行, readpast 锁定会跳过此行。

使用 indexprefetch lru | mru

indexprefetch lru | mru 选项可覆盖 Adaptive Server 优化程序作出的选 择。请慎用这些选项,并始终用 set statistics io on 检查性能影响。请参见

《性能和调优指南:监控和分析》中的 “使用 set statistics 命令”。

标准 符合 ANSI SQL 的级别符合初级标准。在 from 子句中使用多个表和用数 据库名限定表名属于 Transact-SQL 扩展。

readpast 是一个 Transact-SQL 扩展。

权限 如果 set ansi_permissions on,则除具有 delete 语句所需的常规权限外, 还必须对 where 子句中出现的所有列具有 select 权限。缺省情况下, ansi_permissions off

下文说明了基于您的细化权限设置的 delete 的权限检查。

image

细化权限已启用 在启用细化权限的情况下,您必须是表或视图所有者,或者是拥有 delete 权 限的用户或具有 delete any table 权限的用户。

细化权限已禁用 在禁用细化权限的情况下,您必须具有 delete 权限,或者是表的所有者或是 具有 sa_role 的用户。


审计 sysaudits event extrainfo 列中的值如下:


事件

审计选项

审计的命令或访问权限

extrainfo 中的信息

18

delete

从表中删除数据的

delete 命令

角色 – 当前活动角色

关键字或选项 delete

先前值 NULL

当前值 NULL

其它信息 NULL

代理信息 set proxy 有效时的初始登录名

19

delete

从视图中删除数据的

delete 命令

角色 – 当前活动角色

关键字或选项 delete

先前值 NULL

当前值 NULL

其它信息 NULL

代理信息 set proxy 有效时的初始登录名


另请参见 命令 create trigger, drop table, drop trigger, truncate table, where 子句 .




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

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等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------