觸發器

                       觸發器及常見的SQL語句:
insert
delete
update
insert:
USE ITAT
SELECT * FROM NAN
alter trigger tri02
on nan for insert
as
begin
   if exists (select  * from inserted)
   begin
     declare @uname varchar(8),@sex char(2),@age int
     set @uname=(select 姓名 from inserted)
     set @sex=(select 性別 from inserted)
     set @age=(select 年齡 from inserted)
     print '姓名:
'+@uname
     print '性別:'+@sex
     print '年齡:'+cast(@age as varchar(2))
   end
end

delete 觸發器: 監控針對某個表是否存放delete 操作,如果有就觸發此類觸發器.
語法:
create trigger 觸發器名
on 表名 for delete
as
begin
    SQL 語句
end
臨時表: deleted  存放的是準備刪除的舊數據
實例: 編寫觸發器,實現禁止刪除nan表中的任何數據

select * from nan
delete from nan where 姓名='李四'
實例:不得刪除劉帥.
alter trigger tri03
on nan for delete
as
begin
   if exists (select * from deleted where 姓名='劉帥')
   begin
       print '此人甚爲重要,不得輕易刪除!'
       rollback
   end
end
select * from nan
delete from nan where 姓名='劉帥'

update 觸發器: 監控對某個表有無update操作,如果有,就觸發此類觸發器.
語法:
create trigger 觸發器名
on 表名 for update
as
begin
   SQL 語句
end
臨時表: inserted  更新後的新數據
        deleted  更新前的舊數據
實例:禁止更新nan中的所有信息

update nan set 性別='女'
select * from nan
實例: 禁止更新姓名和性別
alter trigger tri04
on nan for update
as
begin
    if update(姓名) or update(性別)
    begin
       print '禁止更新姓名和性別!!!'
       rollback
    end
end

實例:
create table s
(
姓名 varchar(8),
性別 char(2),
年齡 int
)
create table c
(
性別 char(2),
人數 int default 0
)
insert into c (性別) values ('男')
insert into c (性別) values ('女')
select * from s  select * from c
alter trigger tri05
on  s   for insert
as
begin
    if exists (select * from inserted)
    begin
       update c set 人數=人數+1 where 性別 in (select 性別 from inserted)
    end
end
select * from s select * from c
insert into s values ('張八','男',20)
insert into s values ('李九','女',30)
delete from s
update c set 人數=0
實例: 刪除s表的記錄時,C表的人數隨之減少
instead of   替代觸發器
select * from view_2
SELECT * FROM 公司表
 

create trigger 觸發器名
on 視圖名 instead of 操作(insert delete update)
as
begin
   SQL 語句
end
select * from view_2
create trigger tri06
on view_2  instead of insert
as
begin
   declare @uname varchar(8),@sex char(2),@age int,@gs varchar(10),@address varchar(10),@url varchar(30)    
   set @uname=(select 姓名 from inserted )
   set @sex=(select 性別 from inserted)
   set @age=(select 年齡 from inserted)
   set @gs=(select 公司名稱 from inserted)
   set @address=(select 地址 from inserted)
   set @url=(select URL from inserted)
   insert into 員工表 values (@uname,@sex,@age)
   insert into 公司表 values (@uname,@gs)
   insert into 網址表 values (@gs,@address,@url)
end
insert into view_2 values ('李鵬','男',20,'國務院','大興','www.gwy.cn')
實例: 刪除由多個基表組成的視圖中的記錄
delete from view_2 where 姓名='李鵬'

declare m cursor for select * from yuangong
declare @i int,@c int
set @i=1
set @c=(select count(*) from yuangong)
open  m
fetch next from m
while @i<@c
begin
    fetch next from m
    set @i=@i+1
end
deallocate m

約束數據:
select * from yuangong
insert into yuangong (編號,姓名,性別,年齡,工資) values (15,'小瀋陽','中',28,4000)
達到標準:
1. 域完整性    字段取值範圍
2. 實體完整性  記錄的唯一性
3. 引用完整性  數據一貫的一致性

各種約束:
1. default
2. primary key
3. check
4. unique
5. foreign key
default 約束:默認值約束
實例:通過圖形界面創建表,將性別的默認值設置爲男
select * from t1
insert into t1 (id,uname,age) values (1,'張三',20)
實例:利用命令創建表,將年齡的默認值20
create table t2
(id int,uname varchar(8),
sex char(2),
age int default 20)
insert into t2 (id,uname,sex) values (1,'張三','gg')
select * from t2
實例:給現有表增加默認值.
alter table t2 add constraint df_sex default '女' for sex
insert into t2 (id,uname) values (5,'錢七')
select * from t2
實例:增加錄入日期字段,取當前日期
alter table t2 drop column 錄入日期
alter table t2 add 錄入日期 datetime default getdate()
刪除約束:
語法: alter table 表名 drop constraint 約束名
查看當前表的約束
sp_helpconstraint t2
alter table t2 drop constraint df_sex
CHECK 約束
實例:規定t2表的性別只能是男或女
alter table t2 add constraint ck_sex check (sex='男' or sex='女')
update  t2 set age=12 where id=1
select * from t2
查看約束:
sp_helpconstraint t2
刪除約束:
alter table t2 drop constraint ck_sex

實例: 將年齡的取值範圍:18-60(圖形界面)

主鍵約束:
將id設置爲主鍵
select * from t2
alter table t2 add constraint pk_id1 primary key(id)
alter table t2 alter column id int not null
sp_helpconstraint t2
將uname 設置爲主鍵
alter table t2 alter column uname varchar(8) not null
alter table t2 drop constraint pk_id1
alter table t2 add constraint pk_uname primary key(uname)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章