文档介绍:完整性的要求
数据库中数据的正确性、相容性
约束的实现
DBMS支持对约束的声明
for data
使用触发器(触发程序)
for action (event)
SQL中的约束和触发程序
约束是基于数据变化的
Trigger则是基于对表的操作(动作)的
当指定的表上发生特定的操作,系统便激活Trigger程序
大部分DBMS产品均支持Trigger
触发器类型
Insert / Update / Delete
Before / After
举例:
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the distributors.'
GO
触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。
触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。
触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。
激发一个外部动作
触发器的用途
存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名称并给出参数(如果该存储过程带有参数)来执行它。
存储过程(Stored Procedure)
允许模块化程序设计,含有控制语句
存储过程能够实现较快的执行速度
存储过程能够减少网络流量
存储过程可被作为一种安全机制来充分利用
存储过程-示例
Create Procedure update_dept (IN old_dept_num INT,
IN new_dept_num INT,
IN new_dept_name Char(20),
IN new_dept_head_id INT)
BEGIN ATOMIC
Insert Into Department
(dept_id,dept_name, dept_head_id)
Values (new_dept_num, new_dept_name, new_dept_head_id);
Update employee
Set dept_id = new_dept_num
Where dept_id=old_dept_num;
Delete From department
Where dept_id=old_dept_num;
END
Execute update_dept 123,212,’cs’,’98001’
数据访问接口
交互式SQL
嵌入的SQL
CLI和ODBC、JDBC
OLE DB
嵌入式SQL
宿主语言
处理复杂运算,执行复杂过程
丰富的库函数
数据库访问的困难
嵌入的SQL
方便的数据库访问
事务处理能力
上下文无关,无法处理复杂过程
嵌入式SQL
处理复杂过程
宿主语言
访问数据库
嵌入的SQL语句
嵌入式SQL
宿主语言与嵌入的SQL语句
不同的体系
DB厂商提供库函数
需对SQL语句进行预编译宿主语言的体系
SQL语句宿主语言的函数调用(参数)
统一编译目标程序
嵌入式SQL语句
由EXEC SQL引导、以‘;’结尾
EXEC SQL Delete From 学生;