数据字典或系统目录:是一个系统数据库,它是描述数据库中数据信息的仓库,是关于数据的数据或元数据。
元组—>行或记录 属性—>列或字段 元组的数量—>基数 属性的数量—>度
关系—>表 域—>合法的值或原子的值的集合 键—>唯一标识符
每个元组中的每个属性的值是原子的,意味着每个值取自属性的域,并且不允许有多个或重复的值。
- 超键:是一个属性或属性集合,唯一的标识了一个关系中的元组
- 关系键:一个或多个关系属性连接后的集合,大多数关系理论限制关系键为最小的属性数量,并且不包含任何不必要的属性
- 唯一性
- 没有冗余:从属性集合中删除一个属性,则剩余的属性不再拥有唯一性性质
- 有效性:键中没有属性值是空
- 候选键:当有多个属性或属性组可以作为唯一标识符
- 主键:是超键,从关系中挑选出来用于唯一标识元组的键
外键:为一个或多个属性集合,在一个关系中匹配一些其他的关系(也可能是相同的关系)中的候选键
关系代数
集合论的操作
名字 | 符号 | 键盘形式 |
---|---|---|
并 | u | UNION |
交 | n | INTERSECT |
差 | - | MINUS |
乘积 | X | TIMES |
- 专门的关系操作
名字 | 符号 | 键盘形式 |
---|---|---|
投影 | R[] | R[] |
选择 | R where condition | R where condition |
连接 | join | |
除 | ÷ | divide by |
笛卡尔集运算
也成叉积运算,是将一来自第一个命名表(关系)中的每个元组(行)与第二表中的每个元组进行连接。笛卡尔集将两个关系相乘定义第三个关系,第三个关系中包含这两个关系中的所有可能的元组对。因此,如果一个关系有K个元组和M个属性,另一个关系中有L个元组和N个属性,则笛卡尔积产生的关系有(N+M)个属性和(K*L)个元组。
SQL数据类型
数据类型 | 说明 |
---|---|
CHAR(n) 或character(n) | 固定长度的字符串 |
varchar(n) | 可变长度的字符串,最大长度为n |
integer或int | 整数 |
float(p) | 精度等于或大于p的浮点数 |
可变长度的字符串,最大长度为n | |
real | 单精度浮点数 |
date | 日期,用YYYY-MM-DD |
time | 时间,用HH:MM:SS |
SQL运算符
运算符 | 说明 |
---|---|
算术运算符 | |
+,- | 一元运算符,表示正,负 |
* | 乘法 |
/ | |
+ | |
- | |
比较运算符 | $1600 |
= | 等于 |
!=,<> | 不等于 |
< | 小于 |
> | 大于 |
= | 大于等于 |
<= | 小于等于 |
IN | 等于任何一个成员 |
NOT IN | 不等于任何一个成员 |
IS NULL | 对空值进行检测 |
IS NOT NULL | 对非空值进行检测 |
LIKE | 当第一个表达式与第二个表达式的模式匹配是返回真 |
ALL | 与列表中的全部值进行比较 |
ANY,SOME | 与列表中的每个只进行比较 |
EXISTS | 如果子查询至少返回一行为真 |
BETWEEN x AND y |
=x并且<=y |
逻辑运算符 | |
AND | |
OR | |
NOT | |
集合运算符 | |
UNION | 从两个查询中返回去掉重复行后的所以行 |
UNION ALL | 从两个查询中返回所以行 |
INTERSECT | 返回两个查询所选择的所有行 |
MINUS | 返回属于第一个查询而不属于第二个查询的行 |
聚集运算符 | |
AVG | 平均值 |
MIN | 最小值 |
MAX | 最大值 |
SUM | 合计 |
COUNT | 计数 |
SQL数据库定义语言(DDL)
- CREATE TABLE
- CREATE VIEW
- CREATE INDEX
- ALTER TABLE
- DROP TABLE
- DROP VIEW
- DROP INDEX
SQL数据查询语言(DQL)
SELECT [ALL|DISTINCT] column-name
FROM table-name
[WHERE condition expression
GROUP BY column-name
HAVING condition expression
ORDER BY column-name]
SQL数据操纵语言(DML)
INSERT命令
INSERT INTO table-name[(attribute-value)]
VALUES (lists of values for row 1,
lists of values for row 2,
.
.
.
lists of values for row n);DELETE命令
DELETE FROM table-name
WHERE condition expression
delete from table1只是清除所有的数据
drop table1删除该表,包括表的结构和数据UPDATE 命令
UPDATE table-name
SET target-value-list
WHERE ondition expression
SQL数据控制语言(DCL )
GRANT
DBA用此命令授权。
GRANT privileges
ON table-name/view-name
TO user-id
得到授权的用户可以将此权限授权给其他用户。REVOKE
DBA用此命令收回用户的权限
REVOKE privileges
ON table-name/view-name
FROM user-id事务
数据库处理的逻辑工作单元,包括一个或多个数据库访问操作。锁的粒度:数据库级,表级,页级,行级,属性级
最简单的加锁模式是两种类型的锁:S共享锁(或读锁)和X排它锁(写锁)。
如果:事务T在粒度G上有一个S锁,将允许事务W发出的S锁的请求。换句话说,读-读是可交换的
- 事务T在粒度G上有一个S锁,将拒绝事务W发出的X锁的请求。换句话说,读-写是不可交换的
- 事务T在粒度G上有一个X锁,将拒绝事务W发出的任何请求。换句话说,写是不可交换的。
锁的分类
- 二元锁
锁主要有两种状态:加锁的(或称为‘1’状态),不加锁的(或称为‘0’状态)。如果数据库表,页,元组(行)或属性(字段)的一个对象被一个事务加锁了,则任何其他的事务就不能访问了。产生的问题是:若两个事务都对表进行读操作,也不能访问,不能并发,效率低。 - 共享/排他(或读/写)锁
读加锁也称为共享锁,因为允许其他的事务读取这个数据项。写加锁也称为排他锁,因为只允许有一个事务持有数据项上的锁。
自主访问控制
账户级别的权限分配:在账户级别的权限分配上,DBA为每一个账户指定独立于数据库关系(或表)的特定权限。
- CREATE SCHEMA权限:创建模式
- CREATE TABLE 权限:创建表
- CREATE VIEW权限:创建视图
- ALTER权限:添加或移除关系的 属性
- DROP权限:删除关系或视图
- MODIFY权限:删除,插入或更新元组
- SELECT权限:使用SELECT查询语句从数据库中检索信息
关系(或表)级别的权限分配:DBA控制访问数据库中关系或视图的权限。
- R上的SELECT权限:查询或读取R中的元组
- R上的MODIFY权限:修改(UPDATE,INSERT和DELETE)R中的元组
R上的REFERENCES权限:引用关系R
eg:
GRANT {ALL|privilege-list}
ON {table-name[(column-comma-list)]|view-name[(column-comma-list)]}
TO {PUBLIC|user-list}
[WITH GRANT OPTION]
ALL:说明将指定对象的所有操作权限都赋于指定用户
privilege-list:权限列表
ON:指明了对哪个对象的权限,该对象可以是表或视图
column-comma-list:约束指定列的权限。如果没有指定,那么权限将覆盖整个的表和视图
TO:用来指定被授权的用户
PUBLIC:表示把权限授予系统中所有具有有效用户ID和口令的用户
user-list:被授权用户列表
WITH GRANT OPTION:说明被授权用户可以将指定的权限授予其他用户
收回权限的例子:
eg:
REVOKE {ALL|privilege-list}
ON {table-name[(column-comma-list)]|view-name[(column-comma-list)]}
FROM {PUBLIC|user-list}
级联授权,收回权限也是级联收回。