演示:通过触发器对数据库进行级联操作
2012-06-20 19:46
537 查看
背景:
数据库中有两个表tableA 和tableB,tableA的主键是ID,ID 在tableB中是外键,这个外键约束叫 FK_tableB_ID目标:
在更新tableA的主键的同时,更新tableB中的 ID思路:
在更新tableA中的 ID 时触发一个触发器,这个触发器主要会作如下操作:1.禁用约束 FK_tableB_ID
2.更新tableA中的 ID
3.更新tableB中的 ID
4.启用约束 FK_tableB_ID
SQL 代码:
--创建表tableA CREATE TABLE tableA( ID nchar(4) NOT NULL PRIMARY KEY ) GO --创建表tableB CREATE TABLE tableB( ID nchar(4) NOT NULL, CONSTRAINT FK_tableB_ID FOREIGN KEY(ID) REFERENCES tableA(ID) ) GO --创建触发器 CREATE TRIGGER updateID ON tableA INSTEAD OF UPDATE AS BEGIN BEGIN TRY BEGIN TRANSACTION DECLARE @myID nchar(4) DECLARE @oldID nchar(4) SELECT @myID = ID FROM INSERTED SELECT @oldID = ID FROM DELETED --1.禁用外键约束 ALTER TABLE tableB NOCHECK CONSTRAINT FK_tableB_ID --2.更新tableA表 UPDATE tableA SET ID = @myID WHERE ID = @oldID --3.更新tableB表 UPDATE tableB SET ID = @myID WHERE ID = @oldID --4.启用外键约束 ALTER TABLE tableB CHECK CONSTRAINT FK_tableB_ID COMMIT TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION END CATCH END GO
相关文章推荐
- 通过shell脚本进行数据库操作
- 演示一个通过触发器进行审计的示例
- silverlight 通过WCF与LinQ对数据库进行操作2
- 通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库)
- 通过shell脚本进行数据库操作
- 安卓通过JDBC进行数据库操作
- VS通过Oracle驱动连接数据库,对图片进行存取操作(Oracle.DataAccess.Client.dll)
- Hibernate动态建表,通过hbm.xml配置文件创建数据表,进行数据库操作, 动态模型
- 通过AsyncQueryHandler异步对数据库进行增删查操作
- 演示一个通过触发器进行审计的示例
- 通过insert型触发器对员工数据进行添加操作
- 通过数据库对Django进行删除字段和删除模型的操作
- 有关NC65通过sql语句对数据库进行操作
- 通过shell脚本进行数据库操作
- 安卓:ContentProvider之服务端提供接口,客户端通过接口对数据库中的数据进行操作
- 通过触发器进行的操作
- 安装mysql并通过mybatis进行数据库操作
- 通过shell脚本进行数据库操作
- 数据库基础入门(三)——通过JDBC对数据库进行增删改查操作
- 通过shell脚本进行数据库操作