存储过程 是定义好的工具包,用于实现某一特定的功能
触发器是具有智能的工具包,当外界调条件改变时,符合触发器条件时,就自动运行,完成指定的任务
事件处理机制
作用:
·1 对数据库间的数据完整性做强制性约束
·2 对数据库中的表进行级联操作,可以自动触发操作的类型
·3 跟踪变化,对违法的操作进行回滚或撤销 保证数据库安全
·4 可以设定 错误返回的信息,增加程序的可维护性
·5 触发器可以调用更多的存储过程
分类:
1 数据操作语言触发器
依附于特定的表或者视图进行操作,当数据服务器有数据操作事件时,触发器代码执行
INSERT触发器 ,UPDATE触发器,DELETE 触发器
2 数据定义语言触发器
数据库出现了数据定义语言时,激活 DDL触发器,记录数据库架构进行某些更改
插入触发器
CREATE TRIGGER no_insert
ON xxxx
AFTER INSERT
AS
BEGIN
RAISERROR("not allow add new record in this table",1,1);
ROLLBACK TRANSACTION
END
Delete 触发器
CREATE TRIGGER xxx_del
ON xs
AFTER DELETE
AS
BEGIN
SELECT Id AS deleteONE FROM DELETED;
END
/...
执行
DELETE FROM dbo.Grade
WHERE Id = 2;
CREATE TRIGGER xs_update
ON xs
AFTER UPDATE
AS
BEGIN
SELECT 姓名 AS 更新后的姓名 FROM INSERTED;
SELECT 姓名 AS 更新前的姓名 FROM DETETED;
END
//执行
UPDATE xs SET 姓名=‘何明’ WHERE 学号 =‘222’;
CREATE TRIGGER xs_instead
ON xs
INSTEAD OF INSERT
AS
BEGIN
DECLARE @stu_credits INT;
SELECT @stu_credits = (SELECT 总学分 FROM inserted)
IF @stu_credits >30;
SELECT '总学分不符合要求' AS 失败原因;
END
DDL 触发器
CREATE TRIGGER safty
ON DATABASE
FOR DROP_TABLE,ALTER_TABLE
AS
BEGIN
PRINT ‘当前数据库禁止更改删除操作’;
ROLLBACK TRANSACTION;
END
CREATE TRIGGER update_limit on dbo.Grade
FOR UPDATE
AS
IF update(Id) AND EXISTS (SELECT * FROM inserted WHERE Id=22)
RAISERROR('can not update 22',16,1);
ROLLBACK TRANSACTION
//级联触发器
CREATE TRIGGER trigcategorydelete
ON xs
AFTEr DELETE
AS
BEGIN
DELETE xk WHERE 学号 = (SELECT 学号 FROM deleted);
END