数据库SQL语句--触发器上机练习

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='大型工程一部';

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值