`
yinger_tj
  • 浏览: 10126 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

sybase数据库 级联删除

阅读更多
1.首先sybase不支持级联删除,可通过触发器来实现级联删除功能。

SYBASE产生触发器的语法为:
CREATE TRIGGER 触发器名
ON 表名
FOR INSERT,UPDATE,DELETE
AS
SQL_statement |
FOR INSERT,UPDATE AS
IF UPDATE(column_name) [AND|OR UPDATE(column_name)]...
SQL_statements
上面FOR子句用来指定在触发器上的哪些数据更新命令可激活该 触发器。
IF UPDATE子句检查对指定列的操作类型,在IF UPDATE子句 中可指定多个列。
与ORACLE不同,对于每条SQL语句,触发器只执行一次。
触发器在数据更新语句完成以后立即执行。触发器和启动它的语句被当作一个事务处理,事务可以在触发器中回退。

2.多表删除效率问题。

配置很多表,参考配置集CONFIGUREID作为外键,进行级联删除。目前在sybase只能使用触发器实现级联删除。
触发器同时删除90多张表时,效率过低。

通过以下方式可以解决该问题:
A.建表时,请使用“primary key nonclustered”关键字来建立表主键。
如只写“primary key”,sybase默认以“primary key clustered”方式建立表主键,这样删除时,数据库移动数据较大,会造成删除效率低。

alter table NR8250_R_DRYCTOUT
  add constraint P_NR8250_R_DRYCTOUT primary key nonclustered (MOI)

B.建表时,请同时在该表级联删除时,where条件查找中需要匹配的ID索引,可以提高查找效率。
具体请参考下面的例子。


if exists (select * from sysobjects where id = object_id ('DBO.NR8250_R_SHELF') and sysstat & 0xf = 3)
drop table DBO.NR8250_R_SHELF
go
create table NR8250_R_SHELF
(MOI              varchar(200)      not null
,NEID             varchar(200)      not null
,UCRACKNO         numeric not null
,UCSHELFNO        numeric not null
,UCSHELFTYPE      numeric null
,CONFIGUREID       varchar(200)       not null
)
----创建非聚簇主键
alter table NR8250_R_SHELF
  add constraint P_NR8250_R_SHELF primary key nonclustered (MOI,UCRACKNO,UCSHELFNO)
----创建索引
  create index IDX1_NR8250_R_SHELF on NR8250_R_SHELF(CONFIGUREID)

-----取消外键级联删除定义
/*alter table NR8250_R_SHELF
  add constraint F_NR8250_R_SHELF foreign key (CONFIGUREID)
  references NR8250_R_CONFIGURESET (CONFIGUREID) --on delete cascade*/
go

-------创建配置集以下表与配置集表的级联删除触发器
if exists(select * from sysobjects where name='TRG_DELETE_NR8250V1_CONFIGSET' and type='TR')
begin 
drop trigger TRG_DELETE_NR8250V1_CONFIGSET
end

create trigger TRG_DELETE_NR8250V1_CONFIGSET
on NR8250_R_CONFIGURESET for delete
as
begin
---------多表级联删除
delete NR8250_R_RACK from deleted as d where NR8250_R_RACK.CONFIGUREID=d.CONFIGUREID
delete NR8250_R_SHELF from deleted as d where NR8250_R_SHELF.CONFIGUREID=d.CONFIGUREID
delete NR8250_R_BOARD from deleted as d where NR8250_R_BOARD.CONFIGUREID=d.CONFIGUREID
delete NR8250_R_SNTP from deleted as d where NR8250_R_SNTP.CONFIGUREID=d.CONFIGUREID
end

3.计算sql语句在sybase中的执行效率,
请在sql语句前后,增加SELECT CONVERT(VARCHAR(30),GETDATE(),109)语句,从前后时间差判定当前语句的执行效率。

SELECT CONVERT(VARCHAR(30),GETDATE(),109)
alter table NR8250_R_SHELF
  add constraint P_NR8250_R_SHELF primary key nonclustered (MOI,UCRACKNO,UCSHELFNO)
SELECT CONVERT(VARCHAR(30),GETDATE(),109)
if exists (select * from sysobjects where id = object_id ('DBO.NR8250_R_SHELF') and sysstat & 0xf = 3)
drop table DBO.NR8250_R_SHELF
go
create table NR8250_R_SHELF
(MOI              varchar(200)      not null
,NEID             varchar(200)      not null
,UCRACKNO         numeric not null
,UCSHELFNO        numeric not null
,UCSHELFTYPE      numeric null
,CONFIGUREID       varchar(200)       not null
)
----创建非聚簇主键
alter table NR8250_R_SHELF
  add constraint P_NR8250_R_SHELF primary key nonclustered (MOI,UCRACKNO,UCSHELFNO)
----创建索引
  create index IDX1_NR8250_R_SHELF on NR8250_R_SHELF(CONFIGUREID)

-----取消外键级联删除定义
/*alter table NR8250_R_SHELF
  add constraint F_NR8250_R_SHELF foreign key (CONFIGUREID)
  references NR8250_R_CONFIGURESET (CONFIGUREID) --on delete cascade*/
go


if exists (select * from sysobjects where id = object_id ('DBO.NR8250_R_RACK') and sysstat & 0xf = 3)
drop table DBO.NR8250_R_RACK
go
create table NR8250_R_RACK
(MOI              varchar(200)      not null
,NEID             varchar(200)      not null
,UCRACKNO         numeric not null
,UCRACKTYPE       numeric null
,ACRACKNAME      varchar(200) null
,DWTANKNO                               numeric null
,DWRESERVED       numeric null
,CONFIGUREID       varchar(200)       not null
)
alter table NR8250_R_RACK
  add constraint P_NR8250_R_RACK primary key nonclustered (MOI,UCRACKNO)

  create index IDX1_NR8250_R_RACK on NR8250_R_RACK(CONFIGUREID)
/*alter table NR8250_R_RACK
  add constraint F_NR8250_R_RACK foreign key (CONFIGUREID)
  references NR8250_R_CONFIGURESET (CONFIGUREID) --on delete cascade*/
go

if exists (select * from sysobjects where id = object_id ('DBO.NR8250_R_BOARD') and sysstat & 0xf = 3)
drop table DBO.NR8250_R_BOARD
go
create table NR8250_R_BOARD
(MOI              varchar(200)       not null
,NEID             varchar(200)      not null
,UCRACKNO         numeric not null
,UCSHELFNO        numeric not  null
,UCSLOTNO         numeric not  null
,WBOARDTYPE       numeric null
,UCPOWERCTRL                  numeric null
,UCMODE                       numeric null
--,DWRADIOMODE          numeric null            --NR8250 V2.00, BY QIUHUA 2012-03-05
--,DWFUNCSET             numeric null            --NR8250 V2.00, BY QIUHUA 2012-03-05
,DWRESV1          numeric null
,DWRESV2          numeric null
,DWRESV3          numeric null
,DWRESV4          numeric null
,DWRESV5          numeric null
,DWRESV6          numeric null
,DWRESV7          numeric null
,DWRESV8          numeric null
,DWRESV9          numeric null
,DWRESV10         numeric null
,DWMANUALOP       numeric null
,DWSTATUS         numeric null
,CONFIGUREID       varchar(200)       not null
)
alter table NR8250_R_BOARD
  add constraint P_NR8250_R_BOARD primary key nonclustered (MOI,UCRACKNO,UCSHELFNO,UCSLOTNO)
 
  create index IDX1_NR8250_R_BOARD on NR8250_R_BOARD(CONFIGUREID)
 
/*alter table NR8250_R_BOARD
  add constraint F_NR8250_R_BOARD foreign key (CONFIGUREID)
  references NR8250_R_CONFIGURESET (CONFIGUREID) --on delete cascade*/
go


-------创建配置集以下表与配置集表的级联删除触发器
if exists(select * from sysobjects where name='TRG_DELETE_NR8250V1_CONFIGSET' and type='TR')
begin 
drop trigger TRG_DELETE_NR8250V1_CONFIGSET
end

create trigger TRG_DELETE_NR8250V1_CONFIGSET
on NR8250_R_CONFIGURESET for delete
as
begin
delete NR8250_R_RACK from deleted as d where NR8250_R_RACK.CONFIGUREID=d.CONFIGUREID
delete NR8250_R_SHELF from deleted as d where NR8250_R_SHELF.CONFIGUREID=d.CONFIGUREID
delete NR8250_R_BOARD from deleted as d where NR8250_R_BOARD.CONFIGUREID=d.CONFIGUREID
end
分享到:
评论

相关推荐

    第四节 数据库安全性与用户管理.docx

    3. Sybase数据库用户登录:用户需在数据库级别验证。 4. 数据库对象授权:用户需对特定数据库对象具有访问权限。 二、数据库角色 角色是权限的集合,有助于简化权限管理和分配。SQL Server提供了三种系统预定义角色...

    数据库上机实验参考.pptx

    同时,学生需要了解数据库参照完整性、级联删除等概念。 在实验中,学生还需要学习存储过程的创建和执行、触发器的建立和使用、数据库安全性控制、创建新用户、用户权限管理等内容。 实验报告的格式要求严格,需要...

    Android开发直连SQL数据库

    jtds是一个开放源代码的Java驱动程序,支持与Microsoft SQL Server和Sybase ASE数据库的连接。在Android项目中,我们可以通过添加jtds的jar包来实现对远程SQL Server的访问。 1. **集成jtds** 首先,你需要将jtds...

    数据库相关知识介绍 sql语言

    10. 级联参考完整性约束:在删除或更新带有外键约束的数据时提供更细粒度的控制。 SQL Server 2000的这些特性显著提升了数据库的灵活性、可扩展性和性能,使得它成为当时企业和开发者的首选数据库解决方案之一。...

    数据库设计经验谈.pdf

    - **级联更新/删除**:当更新或删除父表记录时,自动更新或删除子表中的相关记录。 **3. 域完整性** - **数据验证**:设置字段级别的约束条件,如非空、唯一性等。 - **默认值**:为字段设定合理的默认值。 #### ...

    数据库学习总结报告.doc.docx

    数据库本身是存储特定主题数据的地方,它支持与数据相关的活动,如查询、更新和删除。事务是保证数据一致性的关键,通过事务,可以确保一组数据库操作要么全部成功,要么全部回滚,从而避免数据不一致。规则、默认值...

    数据库管理系统数据库管理系统.ppt

    10. **级联参考完整性约束**:在删除或更新涉及外键的数据时提供控制,确保数据一致性。 总结来说,SQL Server 2000作为一款强大的数据库管理系统,不仅提供了丰富的版本选择以适应各种业务场景,还通过引入诸多...

    2023年全国计算机三级数据库考点汇总.doc

    14. Adaptive Server Anywhere是SYBASE提供的轻量级、高性能SQL数据库,可作为单机或服务器运行。 15. 事务是操作系统中逻辑工作单元,可以是一系列操作的集合。 16. 数据清理是数据仓库构建过程中的重要步骤,...

    数据库原理7

    10. 级联参考完整性约束:控制外键约束下的删除和更新操作。 这些特性使得SQL Server 2000成为了一个强大且灵活的数据库解决方案,不仅能满足不同规模组织的需求,还提供了丰富的工具和功能来优化数据管理和应用...

    SQL-Server-2000数据库管理系统.ppt

    10. 级联引用完整性约束:在删除或更新时控制外键约束的行为。 11. Collation增强:用Collation替代Code pages和Sort Orders,提供更灵活的字符集和排序规则。 这些特性使得SQL Server 2000成为一个强大且灵活的...

    goldengate概述、复制模式和技术架构

    GoldenGate以其对数据的实时捕获和传输能力而广受欢迎,它支持多种操作系统平台和数据库系统,如Windows、Linux、AIX、HP-UNIX以及Oracle、MySQL、Sybase、DB2、SQL Server等。 在复制模式方面,GoldenGate提供了...

    韩顺平玩转oracle.txt

    - 大型数据库:如Sybase、Oracle、DB2等,适合超大型项目,数据量可超过几个TB甚至更多。其中,Sybase的数据处理能力略低于Oracle和DB2,但Oracle在性能方面优于DB2。 - **选择数据库的考虑因素**: - **业务模型...

    SQL Server 2000 PPT课件

    10. 级联参考完整性:确保了数据的完整性和一致性,当更新或删除一行时,关联的数据会自动更新或删除。 这些特性使得SQL Server 2000成为一个强大而灵活的数据库管理系统,广泛应用于企业的数据存储和管理,为业务...

    powerbuilder试题

    10. 在数据窗口画板中,如果想统一调整从数据库中检索出的数据的字体,可以从“Edit”菜单中选择“Select”菜单项,在系统弹出的级联菜单中,选 Select All 菜单项。 11. 要删除对象级结构,需在 pbl 库管理器中...

    php网络开发完全手册

    13.3.3 SYBASE 207 13.3.4 DB2 207 13.3.5 SQL Server 207 13.4 SQL语言简介 207 13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式(2NF) 209 13.6.3 ...

Global site tag (gtag.js) - Google Analytics