diff --git "a/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/1010\344\275\234\344\270\232.sql" "b/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/1010\344\275\234\344\270\232.sql" new file mode 100644 index 0000000000000000000000000000000000000000..b1bdffe77d9612dec44b73d3fee7fce1e29dbcc4 --- /dev/null +++ "b/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/1010\344\275\234\344\270\232.sql" @@ -0,0 +1,127 @@ +--部门 +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) +------------------------------------------------------------------------------------------------------------ + +select * from Department +select * from People + +--触发器(trigger) +--创建触发器,往部门表插入一条数据('005','软件部') 之后 --- >自动执行的 输出新插入部门的id和部门名称。 +go +--after +create trigger tri_PrintDepartmentName +on Department for insert +as + + declare @name varchar(20), @id varchar(20) + --找到刚刚插入的这个信息 inserted:受影响行数的中的结果集 + select @name = DepartmentName, @id=DepartmentId from inserted + print @name + char(9) + @id +go + +insert into Department values('006','测试部') +update Department set DepartmentName='开发部' where DepartmentId='006' + +--drop trigger tri_PrintDepartmentName + + +--插入一个新员工 并输出该员工的基本信息 +create trigger tri_CheckSalary +on People for insert +as + declare @salary money + select @salary = PeopleSalary from inserted + if(@salary>3000) + begin + update People set PeopleSalary=3000 where PeopleId = (select PeopleId from inserted) + end + +insert into People(DepartmentId,PeopleName,PeopleSalary) values('005','赵云',9000) + +--after: delete +--创建触发器实现,删除一个部门时(市场部),将该部门下的员工一起删除。(两张表无外键关联) +create trigger tri_DeletePeopleByDepartment +on Department for delete +as + --删员工 + delete from People where DepartmentId = (select DepartmentId from deleted) --updated + +delete from Department where DepartmentId = '005' + + +--创建触发器实现,当修改某员工工资后,输出该雇员的姓名,更新前工资和更新后工资 +--(测试数据:将001的工资加2000) + +create trigger tri_PrintSalary +on People for update +as + declare @oldmon varchar(20), @newmon varchar(20) + --老的结果集会存到deleted + select @oldmon = PeopleSalary from deleted + --新的结果集会存到inserted + select @newmon = peopleSalary from inserted + print '旧的工资:'+@oldmon + char(9) + '新的工资:'+@newmon + + +update People set PeopleSalary -= 2000 where PeopleId = 001 + +-----作业 +select*from Department +select*from People +--(1)假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到, +--则自动添加部门信息,部门名称为"新部门"。 +create trigger a_insert on People after insert +as +if not exists (select *from Department where DepartmentId=(select DepartmentId from inserted)) +begin +insert into Department(DepartmentId,DepartmentName) +values((select DepartmentId from inserted),'新部门') +end +go +--测试 +insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) +values('003','赵云','男',540) +DELETE FROM People WHERE PeopleName='赵云' +--(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。 +create trigger a_delete on People after delete +as +delete from People where DepartmentId=(select DepartmentId from deleted) +go +--测试 +delete from Department WHERE DepartmentId='006' +--(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改 +create trigger a_update on Department after update +as +update People set DepartmentId=(select DepartmentId from inserted) +where DepartmentId=(select DepartmentId FROM deleted) +GO +--测试 +update Department set DepartmentId='005'where DepartmentId='001' diff --git "a/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/1010\347\254\224\350\256\260.txt" "b/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/1010\347\254\224\350\256\260.txt" new file mode 100644 index 0000000000000000000000000000000000000000..e1090627ddcfc803c1c64c591dc33658bc6db57e --- /dev/null +++ "b/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/1010\347\254\224\350\256\260.txt" @@ -0,0 +1,45 @@ +瀛樺偍杩囩▼鐨勪紭鐐: + +妯″潡鍖栫▼搴忚璁 +鎻愰珮鎵ц閫熷害锛氶缂栬瘧 +闄嶄綆缃戠粶閫氫俊閲忥細 +淇濊瘉绯荤粺鐨勫畨鍏ㄦэ細 +缁冧範锛氬垱寤哄瓨鍌ㄨ繃绋嬫煡璇㈠榛勭殑鍚屽鐨勫鐢熶俊鎭 '榛%' + +瑙﹀彂鍣紙trigger锛 +浠涔堟槸瑙﹀彂鍣細 insert --銆 涓绯诲垪闅忕潃鎻掑叆鎿嶄綔鑷姩鎵ц鐨剆ql璇彞闆嗗悎 +瑙﹀彂鍣紙 trigger 锛夋槸浣滀负瀵规暟鎹簱淇敼鐨勮繛甯︽晥鏋滆岀敱绯荤粺鑷姩鎵ц鐨勪竴鏉¤鍙ャ傚畠鏄竴绉嶇壒娈婄殑瀛樺偍杩囩▼銆備篃鏄竴涓簨鍔★紙鍙互鍥炴粴锛夈備负浜嗗畾涔変竴涓Е鍙戝櫒锛屾垜浠繀椤伙細 + +鎸囨槑浠涔堟椂鍊欐墽琛岃Е鍙戝櫒銆傝繖琚媶鍒嗕负寮曡捣瑙﹀彂鍣ㄨ妫娴嬬殑涓涓*浜嬩欢*鍜岃Е鍙戝櫒缁х画鎵ц鎵蹇呴』婊¤冻鐨勪竴涓潯浠躲 +鎸囨槑褰撹Е鍙戝櫒鎵ц鏃舵墍閲囧彇鐨勫姩浣溿 +瑙﹀彂鍣ㄥ垎绫 +鍒嗕负 DML瑙﹀彂鍣 + +DML瑙﹀彂鍣 锛 澧炲垹鏀 +after瑙﹀彂鍣細 澧炲垹鏀 涔嬪悗鎵ц鐨 +after瑙﹀彂鍣ㄤ富瑕佺敤浜庯細insert锛寀pdate锛宒elete + +instead of 瑙﹀彂鍣 锛 澧炲垹鏀 涔嬪墠妫鏌ョ殑 +鍒涘缓瑙﹀彂鍣ㄧ殑璇彞 +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 琛****鏈夋暟鎹紙鏃ф暟鎹級 +