标签:
数据库复习⑧
2016年6月18日
21:23
Main Integrity Constraints 实体完整性约束
1.各种约束
Keys
Foreign-key 外键 引用完整性约束
Value-based constraints 值约束
Tuple-based constraints 元组约束
Assertions 断言
2.Key Constrains
Primary Key:
CREATE TABLE branch(
bname CHAR(15) PRIMARY KEY,
bcity CHAR(20),
assets INT);
or
CREATE TABLE depositor(
cname CHAR(15),
acct_no CHAR(5),
PRIMARY KEY(cname, acct_no));
Candidate Keys:
CREATE TABLE customer (
ssn CHAR(9) PRIMARY KEY,
cname CHAR(15),
address CHAR(30),
city CHAR(10),
UNIQUE (cname, address, city);
3.Attribute Constraints
4.Foreign Keys外键
主键、外键和索引的区别?
主键 |
外键 |
索引 |
|
定义: |
唯一标识一条记录,不能有重复的,不允许为空 |
表的外键是另一表的主键, 外键可以有重复的, 可以是空值 |
该字段没有重复值,但可以有一个空值 |
作用: |
用来保证数据完整性 |
用来和其他表建立联系用的 |
是提高查询排序的速度 |
个数: |
主键只能有一个 |
一个表可以有多个外键 |
一个表可以有多个惟一索引 |
1、外键引用的是需要其它表的主键,或者候选键。
2、外键创建之后并不会自动创建索引,这个是有开发人员自己考虑在外键上建相关索引是否能获取到查询效率上的提升
3、默认的情况下如果在引用表插入不存在的外键值或者在主表删除了一个被引用的数据,数据库都会报错。
5.Global Constraint: Assertions 全局限制 断言
CREATE ASSERTION <name>
CHECK ( <condition> );
6.Trigger 触发器
语法:
DELIMITER |
CREATE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON [dbo]<tableName> //dbo代表该表的所有者
FOR EACH ROW
BEGIN
--do something
END |
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
DML触发器
当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。
DDL触发器
它是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它在数据库结构发生变化时执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。
举例:
插入时:
create trigger tri_insert
on student
for insert
as
declare @student_idchar(10)
select @student_id=s.student_id from students
inner join insertedion s.student_id=i.student_id
if @student_id=‘0000000001‘
begin
raiserror(‘不能插入1的学号!‘,16,8)
rollbacktran
end
go
更新时:
create trigger tri_update
on student
for update
as
if update(student_id)
begin
raiserror(‘学号不能修改!‘,16,8)
rollbacktran
end
go
删除时:
create trigger tri_delete
on student
for delete
as
declare @student_idvarchar(10)
select @student_id=student_id from deleted
if @student_id=‘admin‘
begin
raiserror(‘错误‘,16,8)
rollbacktran
End
标签:
原文地址:http://www.cnblogs.com/zpfbuaa/p/5597851.html