1. Date类型
date是日期类型 表示为yyyy-mm-dd
time是时间类型 表示为hh:mm:ss
举例:
DiagDate是date类型,DiagTime是time类型
Timestamp就是Date和Time拼起来
时间的用法
从时间类型中extract得到年/月/日
对字符串cast得到时间类型
2. 用户自定义数据类型
使用create type定义类型,使用create domain定义domain
domain在type的基础上增加了constraints
域约束是完整性约束的最基本形式。 他们测试插入数据库中的值,并测试查询以确保比较有意义
3. 完整性约束 Integrity Constraints
完整性约束通过确保对数据库的授权更改不会导致数据一致性丢失,来防止对数据库的意外损坏
not null:
加在数据类型的后面
The check clause
在末尾加check函数,可以保持某个属性的值域
子句约束 value_test 是可选的; 用于指示更新违反了哪个约束
4. 参照完整性 Referential Integrity
确保在一个关系中出现的给定属性集的值也出现在另一个关系中的特定属性集
可以将主键和候选键以及外键指定为 SQL create table 语句的一部分
primary key子句列出了构成主键的属性。
unique 子句列出了构成候选键的属性。
foreign key子句列出了组成外键的属性和外键引用的关系的名称。
– 默认情况下,外键引用被引用表的主键属性
银行的例子:
这个关系的模式图:
5. 断言 assertion
断言是一个谓词,表示我们希望数据库始终满足的条件。
SQL 中的断言采用以下形式
做出断言时,系统会对其有效性进行测试,并在每次可能违反断言的更新时再次对其进行测试
此测试可能会引入大量开销; 因此断言应该非常小心地使用
这个断言可以通过 not exists实现判断
【不存在一个loan,这个loan不存在一个account金额大于1000】
相关子查询,每一轮将一个新的branch送进循环,与loan和account连接,判断。
6. 授权 Authorization
上面是对数据的操作,下面是对关系模式的操作(对列的增删改查等等)
Index - 允许创建和删除索引。
Resources - 允许创建新关系。
Alteration - 允许添加或删除关系中的属性。
Drop - 允许删除关系。
grant & Privileges in SQL
grant语句用于授予授权
grant 权限list on 表名 to 用户们
也可以指定public,即所有用户
授予视图特权并不意味着授予基础关系的任何特权。
权限的授予者必须已经拥有指定项目的权限(或者是数据库管理员)
selet:允许access and query
其他的特权:
revoke
revoke车型grant的权限,语法和grant一样
revoke 权限list on 表名 to 用户们
如果相同的权限被不同的被授予者两次授予同一用户,该用户可以在撤销后保留该权限。
注意是不同的授权者,相同的授权者的话只需要撤销一次
依赖于被撤销权限的所有权限也被撤销