触发器是用户定义在关系表
上的一类由事件驱动的存储过程,由服务器自动激活
触发器是一种特殊的存储过程,它的优点是不管因为什么原因造成的数据变化都能自动相应,对于每条 SQLSQL 语句,触发器仅执行一次,事务可用于触发器中
触发器常用于保护数据完整性,在一定程序上实现安全性保护

# 事务定义

SQL
1
2
3
BEGIN TRANSACTION [ <transactionName> ]
COMMIT TRANSACTION [ <transactionName> ]
ROLLBACK TRANSACTION [ <transactionName> ]

有两个特殊的表用在触发器语句中(不同数据库其名称不一样,以 SQLServerSQL~Server

  • deleted 表。在对基本表进行 DELETEDELETEUPDATEUPDATE 操作时,需将基本表中被删除或修改值存入 deleted 表中,再更新触发器作用的基本表
  • inserted 表。在对基本表进行 INSERTINSERTUPDATEUPDATE 操作时,需将基本表中被插入或修改值存入 inserted 表中,再更新触发器作用的基本表

实际上,UPDATEUPDATE 命令是删除后紧跟着插入,旧元组首先被复制到 deleted 表中,新元组再更新触发器作用的基本表的同时,被复制到 inserted 表中

# 触发器的创建

SQL
1
2
3
4
CREATE TRIGGER 触发器名 ON 表名
FOR <INSERT | UPDATE | DELETE>
AS
一些操作

# 实例

SQL
1
2
3
4
5
6
7
8
9
CREATE TRIGGER sexIns ON Student
FOR INSERT, UPDATE
AS
IF EXISTS(
SELECT *
FROM inserted
WHERE sex NOT IN ('男', '女')
)
ROLLBACK

# 触发器的删除和修改

# 删除

SQL
1
2
3
4
5
ALTER TRIGGER 触发器名
ON 表名
FOR <INSERT | UPDATE | DELETE>
AS
内容

# 删除触发器

SQL
1
DROP TRIGGER 触发器名