SQL中表与表间的级联操作的实现方法

一、利用SQL语言实现级联(级联参考完整性)

       FOREIGN KEY约束包括一个CASCADE选项,允许任何对定义了UNIQUE或PRIMARY TABLE约束的列值进行的改变,并自动传播给外部关键字。该行为被称为级联参考完整性。 具有CREATE TABLE和ALTER TABLE语句的REFERENCES子句支持ON DELETE和ON UPDATE子句。这些子句允许指定CASCADE或NO ACTION选项。
部分语法:
[CONSTRAINT constraint_name]
[FOREIGN KEY][(column[,⋯n])].
REFERENCES ref_table [(ref_column [,⋯n])].
[ON DELETE {CASCADE┃NO ACTION}]
[ON UPDATE {CASCADE┃NO ACTION}]

       NO ACTION指定任何试图删除或更新被其他表的外部关键字参照的关键字, 都将产生错误并将撤销改变。NO ACTION是默认选项。
如果CASCADE被定义且父表中的行发生了变化,那么在参照表中相应的行也发生改变。
例如,在Northwind数据库中,Orders表和Customers表之间有参照关系,特别是Orders.CustomerID外部关键字参照Customers.CustomerID的主关键字。如果在Customers表中对CustomersID执行了UPDATE语句,并且对Orders.CustomersID指定了ON UPDATE CASCADE动作,那么SQL Server将在Orders表中检验一个或多个由之决定的行。如果有这些行的存在,将在Orders表中对这些行和在Customers表中参照的行进行更新。
使用CASCADE选项时,考虑以下因素: 在与其他表有参照关系的表中,可以组合CASCADE和NO ACTION选项。如果SQL Server遇到NO ACTION,它将终止操作并返回相关的CASCADE操作。 当DELETE语句导致组合CASCADE和NO ACTION操作时,在SQL Server检验NO ACTION前就已执行了CASCADE操作。 CASCADE不能用于使用rowversion定义的外部关键字或主关键字。 

   为了让大家更加理解该方法,我举以下一个例子:

--create table a and b  
--主表
Create Table department (dept_id   number (4) Not Null Primary Key, name      varchar2 (10), importdate date default sysdate);  
--子表
Create Table employee (  
                       emp_id       number (4) Not Null Primary Key,  
                       dept_id      number (4),  Not Null
                       name         varchar2 (10),  
                       importdate   date default sysdate  
                      );  
 
Alter Table employee Add Constraint emp_fk Foreign Key (dept_id) References department(dept_id) on delete cascade;  
commit;

ALTER TABLE [tablename]

DROP CONSTRAINT FK_name ALTER TABLE [tablename]

add CONSTRAINT [FK_name] FOREIGN KEY ( [fk_tableid] ) REFERENCES [pk_tablename]     ( [pk_tableid] ) on update cascade on delete cascade

级联更新和级联删除
--删除主表时,级联删除子表
添加数据时,应先添加主表的数据记录

二、在已经建立好了表以后,利用视窗的方法实现级联

对SQL数据库的表,进行级联操作(如级联更新及删除),首先需要设置表的主外键关系,有两种方法:
第一种:
1. 选择你要进行操作的数据库
2. 为你要创建关系的两个表设置主键
3. 在此数据库的数据库关系图一栏处 =>单击右键=>创建新的关系图=>选择要添加关系的表,单击添加
4. 完成后会在关系图的窗口上生成两个表,在表的某列按钮上长按鼠标左键,并拖到另一张表上
5. 在新弹出的"表和列"的窗口中,设置两个表对应的主外键字段,确定
6. 在外键关系窗口中,INSERT 和 UPDATE 规范一栏处,将更新规则和删除规则设置为层叠,点击确定
完成,即可实现级联更新

 第二种:
1. 选择你要进行操作的数据库
2. 为你要创建关系的两个表设置主键
3. 单击你设置外键表的树型节点 =>在键一栏处单击右键=>新建外键
4. 在外键关系窗口中,单击表和列规范一栏右边的按钮
5. 在新弹出的"表和列"的窗口中,设置两个表对应的主外键字段,确定
6. 返回外键关系窗口,在 INSERT 和 UPDATE 规范一栏处,将更新规则和删除规则设置为层叠,点击确
定完成,即可实现级联更新

 

 

你可能感兴趣的:(sql)