⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用触发器来实现数据的完整性.sql

📁 关于数据库的 资料
💻 SQL
字号:
-- 一、用触发器来实现用户自定义完整性
select * from employee

update employee
set salary=salary/10

select * from employee

update employee
set salary=4500
where salary>5000

select * from employee

--如果要在salary上定义一个完整性约束,
--限定其取值不能超过5000,有以下几种作法:

--1、在employee表的salary列上建有核查约束(salary<=5000),
--执行以下语句系统将会报错。
insert employee values('E0021','林正','男','管理','总经理','1974-10-01','1953-05-04',60000,'13879765667','上海市')

--2、如果不建核查约束,则可以定义AFTER类型的触发器,
--当插入记录的salary值超过5000,则回滚插入操作,不会出现系统报错。

create trigger emp_insert1
on employee
after insert
as 
  if (select salary from inserted)>5000
      begin 
          print  '新员工的工资不能超过5000!!!'
          rollback
      end


insert employee values('E0021','林正','男','管理','总经理','1974-10-01','1953-05-04',60000,'13879765667','上海市')

--3、不管在salary上是否建有核查约束,可以通过建instead of的触发器,来实现数据的完整性
create trigger emp_insert
on employee
instead of insert
as 
  if (select salary from inserted)>5000
        print  '新员工的工资不能超过5000'
  else
        insert into employee
          select * from inserted

--再次执行以上插入语句,则该触发器在INSERT操作之前被触发,
--通过执行触发器定义的操作来取代INSERT命令。不致于出现系统报错。

insert employee values('E0021','林正','男','管理','总经理','1974-10-01','1953-05-04',60000,'13879765667','上海市')


--二、用触发器来实现参照完整性
select * from sales

--在sales 表中建一外键约束,sale_id参照employee表中的emp_no
--(没有选级联删除和级联修改)
delete employee
where emp_no='E0008'

--执行以上语句系统报错。
--若在建外键约束时选择了级联删除和级联修改,
--则在删除employee表的同时,会把sales表中的相应记录一并删除。

delete employee
where emp_no='E0008'

--若没有建外键约束,或者建了(不管有没有选级联删除和级联修改),
--都可以通过对EMPLOYEE表建instead of delete的触发器来实现。

create trigger emp_delete
on employee
instead of delete
as 
  delete sales  where sale_id =(select emp_no from deleted)
  delete employee where emp_no =(select emp_no from deleted)
 
delete employee
where emp_no='E0008'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -