From f5cfcbc90b8f1dca4158cc11c8f0e9abb04c8688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98=E6=9D=8E=E9=9F=A6=E5=B3=B0=E2=80=99?= <2669441367@qq.com> Date: Wed, 12 Oct 2022 00:09:58 +0800 Subject: [PATCH] 12 --- ...-\350\247\246\345\217\221\345\231\250.sql" | 101 ++++++++++++++++++ ...10\350\247\246\345\217\221\345\231\250.md" | 95 ++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 "01\346\235\216\351\237\246\345\263\260/\344\275\234\344\270\232/2022-10-10-\350\247\246\345\217\221\345\231\250.sql" create mode 100644 "01\346\235\216\351\237\246\345\263\260/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" diff --git "a/01\346\235\216\351\237\246\345\263\260/\344\275\234\344\270\232/2022-10-10-\350\247\246\345\217\221\345\231\250.sql" "b/01\346\235\216\351\237\246\345\263\260/\344\275\234\344\270\232/2022-10-10-\350\247\246\345\217\221\345\231\250.sql" new file mode 100644 index 0000000..f542e79 --- /dev/null +++ "b/01\346\235\216\351\237\246\345\263\260/\344\275\234\344\270\232/2022-10-10-\350\247\246\345\217\221\345\231\250.sql" @@ -0,0 +1,101 @@ +--部门 +create table Department +( + DepartmentId varchar(10) primary key , --主键,自动增长 + DepartmentName nvarchar(50), --部门名称 +) +--人员信息 +create table People +( + PeopleId int primary key identity(1,1), --主键,自动增长 + DepartmentId varchar(10), --部门编号,外键,与部门表关联 + PeopleName nvarchar(20), --人员姓名 + PeopleSex nvarchar(2), --人员性别 + PeopleSalary money, --薪水 +) +insert into Department(DepartmentId,DepartmentName) +values('001','总经办') +insert into Department(DepartmentId,DepartmentName) +values('002','市场部') +insert into Department(DepartmentId,DepartmentName) +values('003','人事部') +insert into Department(DepartmentId,DepartmentName) +values('004','财务部') + +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('001','刘备','男',8000) +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('001','关羽','男',5000) +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('002','张飞','男',3000) + + + +--假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到, +--则自动添加部门信息,部门名称为"新部门"。 + +go +create trigger tri_InsertDepartment +on People for insert +as + declare @DepartmentId varchar(20) + select @DepartmentId =DepartmentId from inserted + if exists(select * from Department where DepartmentId = @DepartmentId) + print '已存在的部门编号' + else + insert into Department values(@DepartmentId,'新部门') +go + +--drop trigger tri_InsertDepartment + +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('005','阿柳','男',2000) + +--(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。 + + +go +create trigger tri_DeteleDepartmentById +on Department for delete +as + delete from People where DepartmentId = (select DepartmentId from deleted) +go + +delete from Department where DepartmentId = '005' + + + +--**(3)创建一个触发器,删除一个部门的时候判断该部门下是否有员工,有则不删除,没有则删除。** +-- 预习instead of触发器 () +go +create trigger tri_DeleteDepartmentName +on Department instead of delete +as +begin + if exists(select * from People where DepartmentId = (select DepartmentId from deleted)) + print '该部门有人不能删除' + else + delete from Department where DepartmentId = (select DepartmentId from deleted) + print '该部门没人已删除' +end + +--drop trigger tri_DeleteDepartmentName + +delete from Department where DepartmentId = '003' + + +--(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改 + +select * from Department +select * from People +go +create trigger tri_UpadateDepartmentId +on Department for update +as + declare @oldDepId varchar(10),@newDepId varchar(10) + select @oldDepId = (select DepartmentId from deleted) + select @newDepId = (select DepartmentId from inserted) + print '旧的部门编号:'+@oldDepId+ char(9) + '新的部门编号:' + @newDepId + update People set DepartmentId = @newDepId where DepartmentId = @oldDepId +go +update Department set DepartmentId = '008' where DepartmentId = '001' diff --git "a/01\346\235\216\351\237\246\345\263\260/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" "b/01\346\235\216\351\237\246\345\263\260/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000..1b43a85 --- /dev/null +++ "b/01\346\235\216\351\237\246\345\263\260/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,95 @@ +## 瑙﹀彂鍣紙trigger锛 + +#### 浠涔堟槸瑙﹀彂鍣細 insert --銆 涓绯诲垪闅忕潃鎻掑叆鎿嶄綔鑷姩鎵ц鐨剆ql璇彞闆嗗悎 + + **瑙﹀彂鍣**锛 trigger 锛夋槸浣滀负**瀵规暟鎹簱淇敼鐨勮繛甯︽晥鏋**鑰**鐢辩郴缁熻嚜鍔ㄦ墽琛**鐨勪竴鏉¤鍙ャ傚畠鏄竴绉嶇壒娈婄殑**瀛樺偍杩囩▼**銆備篃鏄竴涓**浜嬪姟**锛堝彲浠ュ洖婊氾級銆備负浜嗗畾涔変竴涓猍瑙﹀彂鍣╙(https://so.csdn.net/so/search?q=瑙﹀彂鍣&spm=1001.2101.3001.7020)锛屾垜浠繀椤伙細 + +- 鎸囨槑**浠涔堟椂鍊欐墽琛岃Е鍙戝櫒**銆傝繖琚媶鍒嗕负**寮曡捣瑙﹀彂鍣ㄨ妫娴嬬殑涓涓猏*浜嬩欢\***鍜**瑙﹀彂鍣ㄧ户缁墽琛屾墍蹇呴』婊¤冻鐨勪竴涓潯浠**銆 +- 鎸囨槑**褰撹Е鍙戝櫒鎵ц鏃舵墍閲囧彇鐨勫姩浣**銆 + + + +#### 瑙﹀彂鍣ㄥ垎绫 + +鍒嗕负 DML瑙﹀彂鍣 + +#### DML瑙﹀彂鍣 锛 澧炲垹鏀 + +##### after瑙﹀彂鍣細 澧炲垹鏀 涔嬪悗鎵ц鐨 + +after瑙﹀彂鍣ㄤ富瑕佺敤浜庯細insert锛寀pdate锛宒elete + +##### instead of 瑙﹀彂鍣 锛 澧炲垹鏀 涔嬪墠妫鏌ョ殑 + + + +#### 鍒涘缓瑙﹀彂鍣ㄧ殑璇彞 + +```sql +CREATE TRIGGER <瑙﹀彂鍣ㄥ悕绉> + +ON table_name +FOR [DELETE, INSERT, UPDATE] + +AS + + T-SQL璇彞 + +GO +--WITH ENCRYPTION琛ㄧず鍔犲瘑瑙﹀彂鍣ㄥ畾涔夌殑SQL鏂囨湰 + +--DELETE, INSERT, UPDATE鎸囧畾瑙﹀彂鍣ㄧ殑绫诲瀷 +``` + + + +## 鎬荤粨 + + 1.鎻掑叆鎿嶄綔锛圛nsert锛 +***\*inserted 琛╘****鏈夋暟鎹紝***\*deleted 琛╘****鏃犳暟鎹 + +2.鍒犻櫎鎿嶄綔锛圖elete锛 +***\*inserted 琛╘****鏃犳暟鎹紝***\*deleted 琛╘****鏈夋暟鎹 + +3.鏇存柊鎿嶄綔锛圲pdate锛 +***\*inserted 琛╘****鏈夋暟鎹紙鏂版暟鎹級锛***\*deleted 琛╘****鏈夋暟鎹紙鏃ф暟鎹級 + + + +棰勪範锛 + +4.**鍒涘缓鏇夸唬瑙﹀彂鍣** + +**涓庡墠闈粙缁嶇殑涓夌after瑙﹀彂鍣ㄤ笉鍚岋紝SqlServer鏈嶅姟鍣ㄥ湪鎵цafter瑙﹀彂鍣ㄧ殑sql浠g爜鍚庯紝鍏堝缓绔嬩复鏃剁殑inserted琛ㄥ拰deleted琛紝鐒跺悗鎵ц浠g爜涓鏁版嵁搴撴搷浣滐紝鏈鍚庢墠婵娲昏Е鍙戝櫒涓殑浠g爜銆傝屽浜庢浛浠(instead of****)瑙﹀彂鍣,\**SqlServer鏈嶅姟鍣ㄥ湪鎵ц瑙﹀彂instead of 瑙﹀彂鍣ㄧ殑浠g爜鏃讹紝鍏堝缓绔媆*\*涓存椂鐨刬nserted琛ㄥ拰deleted琛紝鐒跺悗鐩存帴瑙﹀彂instead of瑙﹀彂鍣紝鑰屾嫆缁濇墽琛岀敤鎴疯緭鍏ョ殑DML鎿嶄綔璇彞銆俓*\**\*** + +璇彞锛 + +```sql +create tigger tri_name +on table_name instead of {[INSERT] , [UPDATE] ,] [DELETE]} +as +begin + {sql_statements} +end +``` + + + +```sql +--渚嬮锛 +--**锛3锛夊垱寤轰竴涓Е鍙戝櫒锛屽垹闄や竴涓儴闂ㄧ殑鏃跺欏垽鏂閮ㄩ棬涓嬫槸鍚︽湁鍛樺伐锛屾湁鍒欎笉鍒犻櫎锛屾病鏈夊垯鍒犻櫎銆** +go +create trigger tri_DeleteDepartmentName +on Department instead of delete +as +begin + if exists(select * from People where DepartmentId = (select DepartmentId from deleted)) + print '璇ラ儴闂ㄦ湁浜轰笉鑳藉垹闄' + else + delete from Department where DepartmentId = (select DepartmentId from deleted) + print '璇ラ儴闂ㄦ病浜哄凡鍒犻櫎' +end + + +``` + -- Gitee