转载saber的笔记
DataBase
象集
R中属性X上值为x的诸元组在Z上的分量集合
R为
| 元组1 | 元组2 |
|---|---|
| x1 | Z1 |
| x2 | Z2 |
| x1 | Z3 |
| x2 | Z4 |
x1的象集是{Z1,Z3},x2的象集是{Z2,Z3}
选择
σ
c
o
n
d
i
t
i
o
n
(
t
a
b
l
e
)
\sigma_{condition}(table)
σcondition(table)
信息系的学生
σ
d
e
p
a
r
t
m
e
n
t
=
′
I
S
′
(
S
t
u
d
e
n
t
)
\sigma _{department='IS'}(Student)
σdepartment=′IS′(Student)
投影
若干属性形成一个新表
π
p
r
o
p
e
r
t
y
1
,
p
r
o
p
e
r
t
y
2
(
t
a
b
l
e
)
\pi_{property1, property2}(table)
πproperty1,property2(table)
连接
等值连接
R
⋈
A
θ
B
S
R \mathcal{\underset{A \theta B}{\bowtie}} S
RAθB⋈S
从R和S的广义笛卡尔积中选取A,B属性值相等的那些元组
自然连接
一种特殊的等值连接,要求两个关系中比较的分量必须是相同属性组,并且在结果中把重复的属性列去掉。
除
R中元组在X上分量值x的象集
Y
x
Y_x
Yx包含S中在Y上投影的集合
R:
| A | B | C |
|---|---|---|
| a1 | b1 | c2 |
| a2 | b3 | c7 |
| a3 | b4 | c6 |
| a1 | b2 | c3 |
| a4 | b6 | c6 |
| a2 | b2 | c3 |
| a1 | b2 | c1 |
S:
| D | B | C |
|---|---|---|
| d1 | b1 | c2 |
| d1 | b2 | c3 |
| d2 | b2 | c1 |
R中A的四种属性值的象集为:
a1:{(b1,c2),(b2,c3),(b2,c1)}
a2:{(b3,c7),(b2,c3)}
a3:{(b4,c6)}
a4:{(b6,c6)}
S在(B,C)上的投影为{(b1,c2),(b2,c3),(b2,c1)}
故
R
÷
S
=
R \div S =
R÷S=
| A |
|---|
| a1 |
R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ π Y ( S ) ⊆ Y x } R \div S = \{t_r[X]|t_r \in R \wedge \pi_Y(S) \subseteq Y_x \} R÷S={tr[X]∣tr∈R∧πY(S)⊆Yx}
SQL
create
CREATE DATABASE Test;
USE Test;
CREATE TABLE table1(
# column_name column_type restriction
num VARCHAR(5) NOT NULL,
name VARCHAR(10),
grade INTEGER,
# other setup
PRIMARY KEY (num)
);
insert
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
select
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2..... #
update
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
delete
DELETE FROM table_name [WHERE Clause]
like
当有属性值为"1.com",“2.com”,需要提取所有含有".com"的元组。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
_下横线表示任意单个字符。
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
union
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL # 可选,返回所有结果集,包含重复数据
| DISTINCT#可选。删除重复数据,默认是删除]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
eg
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
order
ORDER BY field1, [field2...] [ASC [DESC]]
# ASC ascend升序 DESC descend降序
group
分组可以使用COUNT,SUM,AVG等函数
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING function(column_name) condition;
使用WITH ROLL UP可以在分组的基础上再进行相同统计
SELECT name, SUM(singin) as singin_count
FROM employee_tbl
GROUP BY name
WITH ROLLUP;
# result:
# +--------+--------------+
# | name | singin_count |
# +--------+--------------+
# | 小丽 | 2 |
# | 小明 | 7 |
# | 小王 | 7 |
# | NULL | 16 |
# +--------+--------------+
join
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。可省去INNER
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.exp1, b.exp2...
FROM table1 a JOIN table2 b
ON a.prop = b.props
Normal Form
- Functional Dependency: Prime attribute ----> Non-prime attribute
- Partial Dependency: Part of prime attribute ----> Non-prime attribute
- Transitive Dependency: Non-prime attribute ----> Non-prime attribute
- 4.Non-prime attribute ----> Prime attribute
- Muti-Valued Dependency: X --> Y , X --> Z, no relation between Y and Z.
which causes x y1 z1, x y2 z2, x y1 z2, x y2 z1 4 possibility.
授权
GRANT SELECT,ALL PRIVILEGES,UPDATE(...),INSERT,DELETE
ON <TABLE>
TO <USER>
REVOKE ...
ON <TABLE>
FROM <USER>
CREATE ROLE R1
GRANT ...
ON ...
TO R1
GRANT R1
TO U1,U2,U3
constraint
CONSTRAINT C_NAME CHECK(...)
CREATE DOMAIN <NAME> <TYPE>
CHECK(...)
P_NAME DOMAIN_NAME
2NF
1NF + no Partial Dependency
3NF
2NF + no Transitive Dependency
BCNF
3NF + no 4.
4NF
BCNF + no Muti-Valued Dependency
事务
原子性,一致性,隔离性,持续性(永久性)
BEGIN TRANSACTION
# OPERATIONS
# IF THEN ELSE
COMMIT
ROLLBACK
恢复
数据转储
登记日志文件
- 正向扫描日志,将故障前完成的事务加入REDO,将故障时未发生的加入UNDO
- 反向扫描,对UNDO中的做逆向操作
- 正向扫描,对REDO中的事务重新执行日志登记
并发
- 丢失修改:T2的提交结果破坏了T1提交的结果
- 不可重复读:T1读之后T2修改,T1再次读时出现不一致
- 读脏数据:T1修改后T2读,之后T1回滚,T2读到了脏数据
锁
- 排它锁:Xlock,不与任何锁相容
- 共享锁:Slock,与共享锁相容
活锁
T1锁r,T2锁r,T3锁r。。。
当T1释放r,可能T3锁r,之后接T4。。。,T2永远等待
预防:采用先来先服务
死锁
- 一次封锁法:事务必须对所有要用的数据一次封锁
- 顺序封锁:对数据对象规定一个封锁顺序
本文转载saber的笔记,涵盖数据库多个知识点。包括象集、选择、投影、连接、除等关系运算,SQL的创建、插入、查询等操作,以及范式、授权、事务、并发等内容,还介绍了事务恢复、并发问题及锁机制等,适合数据库面试备考。
46万+

被折叠的 条评论
为什么被折叠?



