diff --git "a/24\345\274\240\346\267\221\350\212\263/10-10-\350\247\246\345\217\221\345\231\250/10-10-\344\275\234\344\270\232.sql" "b/24\345\274\240\346\267\221\350\212\263/10-10-\350\247\246\345\217\221\345\231\250/10-10-\344\275\234\344\270\232.sql" new file mode 100644 index 0000000000000000000000000000000000000000..a3fce5521c8f5996f03901de83038def4ce0822b --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/10-10-\350\247\246\345\217\221\345\231\250/10-10-\344\275\234\344\270\232.sql" @@ -0,0 +1,52 @@ + +use test_trigger +go + +select * from Department +select * from People +--(1)假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到, +-- 则自动添加部门信息,部门名称为"新部门"。 +go +-- drop trigger tri_insert +create trigger tri_insert +on People for insert +as + declare @code varchar(10) + set @code = (select DepartmentId from inserted) + if exists(select DepartmentId from inserted where DepartmentId not in(select DepartmentId from deleted)) + begin + insert into Department values(@code,'新部门') + end + +insert into People values('002','李铁梅','女',114514) +-- delete from People where PeopleName = '李铁梅' + + +--(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。 +-- insert into Department values('007','测试部') +-- insert into People values('007','jojo','男',114514) +go +create trigger tri_del +on Department for delete +as + delete from People where DepartmentId = (select DepartmentId from deleted) + +delete from Department where DepartmentId = '007' + + +--(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改 +select * from Department +select * from People +go +create trigger tri_update +on Department for update +as + update People set DepartmentId = (select DepartmentId from inserted) + where DepartmentId = (select DepartmentId from deleted) + +update Department set DepartmentId = '007' where DepartmentId = '001' + + + + + diff --git "a/24\345\274\240\346\267\221\350\212\263/10-10-\350\247\246\345\217\221\345\231\250/10-10-\347\254\224\350\256\260-\350\247\246\345\217\221\345\231\250.md" "b/24\345\274\240\346\267\221\350\212\263/10-10-\350\247\246\345\217\221\345\231\250/10-10-\347\254\224\350\256\260-\350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..1d844e02b78d56e70e620f1d4d496d8c477d3908 --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/10-10-\350\247\246\345\217\221\345\231\250/10-10-\347\254\224\350\256\260-\350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,56 @@ +## 瑙﹀彂鍣紙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璇彞 -- 瑕佽Е鍙戠殑鍐呭 + +-- DELETE, INSERT, UPDATE鎸囧畾瑙﹀彂鍣ㄧ殑绫诲瀷 +-- inserted 鏂扮粨鏋滈泦琛 deleted 鏃х粨鏋滈泦琛 +``` + + + + + +## 鎬荤粨 + + 1.鎻掑叆鎿嶄綔锛圛nsert锛 +***\*inserted 琛╘****鏈夋暟鎹紝***\*deleted 琛╘****鏃犳暟鎹 + +2.鍒犻櫎鎿嶄綔锛圖elete锛 +***\*inserted 琛╘****鏃犳暟鎹紝***\*deleted 琛╘****鏈夋暟鎹 + +3.鏇存柊鎿嶄綔锛圲pdate锛 +***\*inserted 琛╘****鏈夋暟鎹紙鏂版暟鎹級锛***\*deleted 琛╘****鏈夋暟鎹紙鏃ф暟鎹級 + + +