当前位置:主页>仓库管理软件> 列表

删除主表的同时删除副表怎么做???

企业管理软件版1楼: 我是个菜鸟,现在在想做个固定资产的系统。我在delphi中的桌面数据库建了2个表,,1个是主表(有系列号,机型(主机,显示器等),工作组,使用部门,等等),第2是详细资料的表(CPU,内存条等)。
我删除主表的一条记录,能不能同时删除详细资料那个表的记录,好象(我删除一个主机的记录,同时也删除CPU,内存条等记录),怎么操纵请说明。谢谢!!!

2楼: 编代码时先写先删明细表的语句,再写删主表的语句不就可以了。 如设备管理软件

3楼: easy,
1、如上ynduanlian所说,
2、如果是SQLSERVER等DBMS,可以在DBMS中做级联删除。

4楼: 级联引用完整性约束

当用户试图删除或更新外键所指向的键时,级联引用完整性约束使您得以定义 Microsoft® SQL Server™ 2000 所采取的操作。

CREATE TABLE 和 ALTER TABLE 语句的 REFERENCES 子句支持 ON DELETE 和 ON UPDATE 子句:

[ ON DELETE { CASCADE | NO ACTION } ]


[ ON UPDATE { CASCADE | NO ACTION } ]
如果没有指定 ON DELETE 或 ON UPDATE,则默认为 NO ACTION。NO ACTION 指定的行为与 SQL Server 的早期版本中发生的行为相同。



ON DELETE NO ACTION

指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚 DELETE。

ON UPDATE NO ACTION

指定如果试图更新某行中的键值,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚 UPDATE。

CASCADE 允许在表间级联键值的删除或更新操作,这些表的外键关系可追溯到执行修改的表。不能为任何具有 timestamp 列的外键和主键指定 CASCADE。

ON DELETE CASCADE

指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。

ON UPDATE CASCADE

指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。

级联引用操作的示例可以基于 Northwind 中 Products 表上的 FK_Products_Suppliers 约束。该约束建立了从 Products 表中的 SupplierID 列到 Suppliers 表中的 SupplierID 主键列的外键关系。如果为约束指定了 ON DELETE CASCADE,则删除 SupplierID = 1 的 Suppliers 表中的行时也将删除 SupplierID = 1 的 Products 表中的三行。如果为该约束指定了 ON UPDATE CASCADE,则更新 Suppliers 表中从 1 到 55 的 SupplierID 值也将更新 Products 表中 SupplierID 值当前等于 1 的三行的 SupplierID 值。


不能为具有 INSTEAD OF 触发器的表指定级联操作。为表定义级联操作后,就不能向该表添加 INSTEAD OF 触发器。

多个级联操作
单独的 DELETE 或 UPDATE 语句可启动一系列级联引用操作。例如,假设有一个数据库包含三个表:TableA、TableB 和 TableC。针对 TableA 中的主键,用 ON DELETE CASCADE 定义 TableB 中的外键。针对 TableB 中的主键,用 ON DELETE CASCADE 定义 TableC 中的外键。如果 DELETE 语句删除 TableA 中的行,则该操作也将删除 TableB 中具有与 TableA 中所删除的主键匹配的任何外键中的所有行,然后删除 TableC 中具有与 TableB 中所删除的主键匹配的任何外键中的所有行。

由单个 DELETE 或 UPDATE 触发的一系列级联引用操作必须构成不包含循环引用的树。在 DELETE 或 UPDATE 所产生的所有级联引用操作的列表中,每个表只能出现一次。级联引用操作树到任何给定表的路径必须只有一个。树的任何分支在遇到指定了 NO ACTION 或默认为 NO ACTION 的表时终止。

触发器和级联引用操作
级联引用操作按下列顺序激发 AFTER 触发器:

首先执行由原始 DELETE 或 UPDATE 直接导致的所有级联引用操作。


当完成原始级联引用操作后,无论是否更新了任何行,都将激发原始表上的 AFTER 触发器。


然后激发级联引用操作链中表上的 AFTER 触发器,但只有已更新或删除了表中的一行或多行时才激发。
如果任何原始级联引用操作集生成任何错误,则产生错误,不激发 AFTER 触发器,并且回滚 DELETE 或 UPDATE。

AFTER 触发器可执行 DELETE 或 UPDATE 语句以启动其它级联引用操作链。每个辅助的引用操作链分开处理。这些辅助的引用操作链的行为与主链一样。在激发任何辅助触发器之前,完成所有的辅助引用操作。在每个独立的单元中,不定义执行级联引用操作和激发受影响的触发器的顺序。

具有 INSTEAD OF 触发器的表不能同时具有指定级联操作的 REFERENCES 子句。但是,在作为级联操作目标的表上,AFTER 触发器可在其它表或视图上执行 INSERT、UPDATE 或 DELETE 语句,以激发在该表或视图上定义的 INSTEAD OF 触发器。

级联引用约束目录信息
下列目录信息是关于级联引用约束的。

Transact-SQL OBJECTPROPERTY 函数支持 property 参数的下面两个新值。

值 对象 描述
CnstIsDeleteCascade 约束 用 ON DELETE CASCADE 定义的 FOREIGN KEY 约束
CnstIsUpdateCascade 约束 用 ON UPDATE CASCADE 定义的 FOREIGN KEY 约束


当指定 ON UPDATE CASCADE 或 ON DELETE CASCADE 时,REFERENTIAL_CONSTRAINTS 信息架构视图返回 UDPATE_RULE 或 DELETE_RULE 列中的 CASCADE。当指定 ON UPDATE NO ACTION 或 ON DELETE NO ACTION,或者根本没有指定 ON UPDATE 或 ON DELETE 时,返回 NO ACTION。



当指定 CASCADE 时,sp_fkeys 和 sp_foreignkeys 所返回的 UPDATE_RULE 和 DELETE_RULE 列被设置成 1,当指定或默认为 NO ACTION 时则返回 0。

当将外键指定为 sp_help 的对象时,输出结果集包含下面两个新列。

列名 数据类型 描述
delete_action nvarchar(9) 表示删除操作是 CASCADE、NO ACTION 还是暂缺(不可用)。
update_action nvarchar(9) 表示更新操作是 CASCADE、NO ACTION 还是暂缺(不可用)。


©1988-2000 Microsoft Corporation。保留所有权利。

5楼: 在主表和副表里面找同一个相关记录,然后都删除掉就可以了!

6楼: 简单一点,主表搞个触发器。
主表删除记录,触发重表删除动作。

企业管理软件版7楼: 我也在做固定资产,可以交流学习一下
===============================================================================MMSN: ekinqyf@hotmail.com

8楼: 谢谢,个位.
能不能为我解释下database组件属性中的AliasName(别名),databasename(数据库名),drivername(BDE驱动名)有是不同,怎么用.

9楼: 多人接受答案了。