create database Project;
create table dept
(dno nvarchar(5) primary key,
dname nvarchar(20),
leader nvarchar(10));
create table project
(pno nvarchar(5) primary key,
pname nvarchar(20));
alter table project
add Leader nvarchar(20);
Insert into project values
(1,'阳光小区','张三') ,
(2,'华茂小区','张三') ,
(3,'世纪公寓','李斯'),
(4,'淡蓝商务','王五'),
(5,'冰海广场','王五') ;
Insert into dept values
(1 ,'小型工程部', '张三'),
(2,'中型工程部','李斯'),
(3,'大型工程部','王五');
select * from project;
select * from dept;
--1、为dept表创建一个名为d_tr的触发器,当执行添加、更新或删除时,激活该触发器。
--通过此例,了解Inserted表和Deleted表的功能。
go
create trigger d_tr
on dept
for insert,update,delete
as
select * from inserted
select * from deleted
update dept
set dname='大型工程一部'
where dname='大型工程部';
--2、为project表创建一个名为g_tr的触发器,实现参照完整性(级联问题)。
go
create trigger g_tr
on project
for insert,update
as
if not exists (select * from dept where leader in (select leader from inserted))
begin
declare
@mylead nvarchar(10)
set @mylead=(select leader from inserted)
print '你在project表中要插入的记录,在dept表中不存在这样的负责人:'+@mylead
rollback
end
--触发
insert into project values('6','度假村别墅','张力');
--3、创建一个名为d_tr1的实现级联更新的update触发器。
--当更新dept表(leader列)时,激活该触发器同时更新project表中相应记录。
--更新:先删除再添加
go
create trigger d_tr1
on dept
after update
as
declare
@mylead nvarchar(20)
update project
set leader=(select leader from inserted)
where leader=(select leader from deleted);
--触发:
update dept set leader='刘雪峰' where dname='大型工程一部';
数据库SQL语句--触发器上机练习
最新推荐文章于 2024-09-14 19:55:29 发布