关于null:
- 涉及到null的算数表达式,结果为null
- 测试空值:is null, is not null
- 涉及null的比较运算,结果为unknown
- select distinct:null = null , 结果为true
- where:谓词结果为unknown,当做false处理(不计入结果集)
- 聚集函数:除count(*)外,所有聚集函数忽略null;若聚集函数输入只有空集,count(*)=0,其他为null
- 外码属性允许为null,只要没被声明为not null
- primary key 自动声明为not null
- unique:该元祖有一属性为null,unique测试可能为真
- 候选码允许为null
完整性约束:
- alter table table-name add <constraint>
-
单个关系上的约束:
not null
unique
check(<谓词>):谓词可以为包括子查询在内的任意谓词 -
参照完整性
-
复杂check条件与断言(assertion)
域约束和参照完整性约束是断言的特殊形式
SQL不提供"for all x ,P(x)" ==> " not exists X such that not P(X)"
关于冗余:
- union,intersect,except自动消除冗余
- 不允许在count(*)中使用distinct
知识点
-
数据库系统:由一个互相关联的数据集合和一组用以访问这些数据的程序组成
-
视图层
-
逻辑层:降低耦合 为上层应用屏蔽了复杂的底层存储细节,即物理数据独立性
-
物理层
-
模式:schema——数据库的总体设计
-
not exits (B except A) ==> A包含B
-
标量子查询:该子查询返回包含单个属性的单个元组
-
标量子查询可以出现在select,from,where中
-
参照完整性约束:参照关系的任意元组在特定属性上的取值,必须等于被参照关系在该特定属性上的取值,
-
delete删除元组:delete r where p
-
可以在select子句中加入标量
-
create assertion <assertion-name> check <predicate>;
-
创建索引
create index studentID_index on student(ID);
-
域
creat domain degree_level varchar(10)
constraint degree_level_test
check(value in('Bachelors','Masters','Doctorate'))
- 三层结构的关系命名机制:目录/模式/关系 视图
- 授权
grant 权限 on 关系 to 用户[with grant option];
//delete,update,select,insert,all
- 等值连接不去掉重复属性,自然连接去掉重复属性