数据库面试总结

本文转载saber的笔记,涵盖数据库多个知识点。包括象集、选择、投影、连接、除等关系运算,SQL的创建、插入、查询等操作,以及范式、授权、事务、并发等内容,还介绍了事务恢复、并发问题及锁机制等,适合数据库面试备考。

转载saber的笔记

DataBase

象集

R中属性X上值为x的诸元组在Z上的分量集合
R为

元组1元组2
x1Z1
x2Z2
x1Z3
x2Z4

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θBS
从R和S的广义笛卡尔积中选取A,B属性值相等的那些元组

自然连接

一种特殊的等值连接,要求两个关系中比较的分量必须是相同属性组,并且在结果中把重复的属性列去掉。

R中元组在X上分量值x的象集 Y x Y_x Yx包含S中在Y上投影的集合
R:

ABC
a1b1c2
a2b3c7
a3b4c6
a1b2c3
a4b6c6
a2b2c3
a1b2c1

S:

DBC
d1b1c2
d1b2c3
d2b2c1

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]trRπ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

恢复

数据转储
登记日志文件
  1. 正向扫描日志,将故障前完成的事务加入REDO,将故障时未发生的加入UNDO
  2. 反向扫描,对UNDO中的做逆向操作
  3. 正向扫描,对REDO中的事务重新执行日志登记

并发

  1. 丢失修改:T2的提交结果破坏了T1提交的结果
  2. 不可重复读:T1读之后T2修改,T1再次读时出现不一致
  3. 读脏数据:T1修改后T2读,之后T1回滚,T2读到了脏数据

  1. 排它锁:Xlock,不与任何锁相容
  2. 共享锁:Slock,与共享锁相容
活锁

T1锁r,T2锁r,T3锁r。。。
当T1释放r,可能T3锁r,之后接T4。。。,T2永远等待
预防:采用先来先服务

死锁
  1. 一次封锁法:事务必须对所有要用的数据一次封锁
  2. 顺序封锁:对数据对象规定一个封锁顺序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值