基本概念
数据:描述事物的符号;数据库:永久存储、有组织、可共享;
数据库管理系统:处于用户与操作系统间,具有数据定义,操纵,运维等功能;
数据库:以上的集合,整体数据结构化(数据间存在联系,与文件系统的区别),具有高共享、低冗余、易扩充等特点;
逻辑独立性:存在外模式与schema的映像,外界的改变可直接作用与此映像上从而可使外模式不用改变;
物理独立性:存在内模式与schema的映像,内部存储结构的改变亦可直接修改映像变化以至数据模式不用改变;
关系数据库
Domain(域):一组相同数据类型的集合;
笛卡尔积:域间的集合运算,从不同域选择出所有不同组合;
关系:笛卡尔积的有限子集(二维表),存在基本表,派生查询表与导出的虚表(视图表);
关系代数
- 选择:从R关系中选择使逻辑表达式为真的元组,然后返回新表;
- 投影:从R中选出若干属性组成新表;
- 等值连接:两表内选出满足A=B等值的元组组成新表;
- 自然连接:两表内匹配属性须相等,且去掉重复属性列(悬浮元组),若把悬浮元组也保存,且在属性值填NULL,成为外连接,也可以只保留左或者右;
SQL
综合统一、高度非过程化、面向集合、统一语法结构;
外模式: 视图
模式: 基本表
内模式: 存储文件
模式定义:定义了一个命名空间,可点引表、视图、授权定义等;
删除时候的CASCADE会删除相连的对象 RESTRICT 则会在存在相连对象时候拒绝执行;
表定义:CREATE TABLE NAME 列名 类型 列级条件... ... ...
表级条件 (约束条件存在于数据字典中)
一些列级条件:PRIMARY KEY, UNIQUE//取唯一值,NOT NULL
一些表级条件:FOREIGN KEY(xxx) REFERENCE TABLE(yyy),xxx为外表的主码,yyy为参照表列属性;
单表查询:SELECT也可以跟表达式,查询顺序可与表中列顺序不一致;DISTINCT 查询项 可以消去重复行;
常用查询条件:
1 比较大小:WHERE xxx <>,!=,=,<,>,!<,!>...;
2 确定范围:WHERE xxx BETWEEN x AND y、xxx IN (x1,x2,...)(IN实际上是多个OR的重写)
3 字符匹配:WHERE xxx LIKE ‘刘%’, LIKE ‘_阳’; _ 表单个任意字符,% 表示任意长度字符串;
4 多重条件:OR、AND
聚集函数:COUNT(*), 有几行;!不能用于WHERE子句!
GROUP BY:不同于WHERE作用于整个基本表,HAVING作用于GROUP BY后分好的组;
多表查询:WHERE子句连接多个表,对于自身连接需要起局部别名来区分;
嵌套查询:
1 IN子查询:查找与一分量具有同属性的元组,相关子查询:可拆开独立执行查询,也可以用连接替代;
2 带有ANY,ALL的子查询:也可以用聚集函数来实现,会更高效;
3 带有EXIST只返回逻辑true OR false
集合查询:UNION合并并去掉重复元组,UNION ALL保留重复元组;
INTERSECT,EXCEPT...
插入元组:INSERT
INTO 表名(若干属性列)
VALUES (对应插入值);
也可插入子查询;
修改元组: UPDATE 表名
SET 列名 = 表达式...
WHERE 条件;(若没有此句则被认为是修改所有元组,也可以嵌套子查询)
WHERE子句可选格式
1 属性列名θ(列名、常量、【ANY|ALL】 SELECT子查询);
2 属性列名 BETWEEN
3 IN
4 LIKE<匹配字符串>
5 IS NULL
6 EXIST
7 AND、OR
数据库安全性
授权:
GRANT SELECT/ALL PRIVILEGES(全部权限) ON TABLE xxx to User1/PUBLIC(全体用户)
收回
REVOKE UPDATE(Sno) ON TABLE xxx FROM User1(User1赋予其他用户的权限也会被收回)
角色(权限的集合):
CREATE ROLE xxx; 然后用GRANT对其授权,或者REVOKE撤回权限;
用户自定义完整性:
CHECK短语限制列级属性:CHECK(GRADE >= 0 AND GRADE <= 100)...
完整性约束命名子句:CONSTRAINT 条件名 CHECK 限制条件。。。
以上两个限制语句多作用在建表时候
断言:
CREATEASSERTION 断言名 CHECK 限制条件。。。
Eg: 对表实行对应操作时会触发断言返回真假来决定是否拒绝执行此操作;
触发器:
CREATE TRIGGER XXX
AFTER 触发事件 ON TABLE (在事件执行之后再触发下面的规则,BEFORE相反)
REFERENCING
OLDROW/OLD TABLE AS 新引用名字
NEWROW...(只有FOR EACH ROW 才能用NEW/OLD ROW)
FOR EACH ROW --行级触发器,每执行一次触发语句下面规则体就执行一次
WHEN (执行条件) (动作体)
注意事项:
触发事件可以是UPDATE、DELETE、UPDATE或者组合
语句级触发器:不同于行级触发器,在触发操作完全执行完后再执行接下来的规则动作体;
规范化:用于减少数据冗余,插入更新异常等
1NF为分量原子性;
2NF为非主属性对主码组的完全依赖;
3NF为消除对主码的传递依赖;
事务的基本概念:一系列数据库操作的基本集合单位;
以BEGIN TRANSACTION开始,以COMMIT或者ROLLBACK结束,前者表示应用成功,后者为撤销;
ACID:
Atomicity:要么都做,要么都不做;
Consistency:原子性的延伸,只有整数倍事务操作下才存在一致性;
Isolation:事务间互不干扰;
Durability:对数据的改变是永久性的;
日志文件记录着所有事务操作的数据文件,主要用来恢复数据;
并发控制:事务为基本并发控制单位;
为什么要进行并发控制?
并发访问修改数据库带来的不一致性:“脏”读(B读取了A修改后的数据,B读完了A又撤销了),不可重复读(多次查询结果不一致)
封锁:(主要并发控制技术)
排他锁:单锁一个事务对数据的访问和修改,其他事务在其释放前不得访问修改;
共享锁:上锁后事务对数据仅有访问权限,无修改权限,其他事务也可以上此锁来访问;
封锁协议:
一级:上x锁,解决了修改丢失的问题,但无法避免“脏”读,因为读数据不需要上锁;
二级:一级协议基础上,事务读之前上s锁,读完了就撤s锁,防止读“脏”数据;
三级:一级基础上,事务完成后才能撤s锁,避免不可重读;
活锁:某些总是被插队,一直等待,FCFS即可解决;
死锁:相互等待,通常撤销代价最小的事务以解开相关锁,使其他事务进行;