数据库期末复习
数据库的基本概念
数据data:数据库存储的基本对象
数据库database:DB,有组织的、可共享的大量数据的集合
数据库管理系统DBMS:用户和操作系统之间的一层数据管理软件
数据库系统DBS:由数据库、数据库管理系统、应用程序和数据库管理员(DBA)组成
数据库系统的特点
数据结构化
数据共享性高,冗余度低且容易扩充
数据独立性高(物理、逻辑)
数据由数据库管理系统统一管理和控制
五种基本运算
并:U
差:- 或 \
选择:_条件(关系名)
投影:_属性列表(关系名) 自动去重
笛卡尔积:x,两两组合,生成一个大表
数据模型
概念模型、逻辑模型(物理模型)
概念模型:E-R图
逻辑模型:网状、层次、关系模型
物理模型:对数据最底层的抽象
E-R图:实体entity、属性attribute、联系relationship
数据模型的组成要素:数据结构、数据操作、数据的完整性约束条件
数据模型 = 数据的结构 + 数据的操作 + 数据的约束
三级模式结构:外模式、逻辑模式、内模式
外模式:子模式/用户模式:用户能看见和使用的局部数据的逻辑结构和特征的描述,视图
模式:逻辑模式:所有用户的公共数据视图
内模式:存储模式:数据物理结构和存储仿射的描述,数据库内部的组织方式
主键、候选键
主键:唯一的、不能为NULL、可以从候选键选一个作为主键
外键:不是表R的主键,但是是表S的主键
超键:能唯一标识元组的属性集合
候选键:能够确定唯一元组的属性组合(超键中挑出唯一最小集合)
主属性:包含在任何一个候选键上的属性
非主属性:不包含在任何一个候选键中的属性
参照完整性
如果一个表中的某个字段是另一个表主键的外键,则该字段的指必须存在于被参照表的主键中,或者为NULL
函数依赖
各个属性之间的一种依赖关系
属性和属性之间一对一的推导关系称为函数依赖
平凡函数依赖
X = {学号, 姓名}
Y是X的子集时(或相等),称为平凡依赖
X → {学号}
非平凡依赖
Y不是X的子集
X → {成绩}
完全依赖函数
第二范式的要求,完全依赖候选键推出数据
部分函数依赖
传递函数依赖
X->Y
Y->Z
Z传递依赖于X
第三范式要求,可以拆表来满足要求
多值依赖
一个属性决定另一个属性的多个值,且这些值彼此之间互不依赖。
范式
数据库设计的基本原则称为范式
第一范式(1NF)
保证数据表中的每一个字段的值具有原子性(不可再拆分的最小数据单元)
即每个元组的所有属性只能有一个值
第二范式(2NF)
第一范式的基础上增加每一条数据都是可唯 一表示的,所有非主键字段都必须完全依赖主键,不能只依赖主键的一部分
第三范式(3NF)
每一个非主键字段都和主键字段直接相关
所有非主属性之间不能有依赖关系,相互独立
范式的优缺点
优点:有助于消化数据库中的数据冗余
扩展性和数据完整性达到最好的平衡
缺点:降低查询效率,范式越高,设计的表越多
BCNF(巴斯范式)
每个非平凡依赖的函数依赖X->Y,X必须是超键
范式的区分
1NF每行每列都只有一个值
2NF完全依赖主键
3NF非主属性之间不能有依赖
ACID4个特性
A:atomicity 原子性
事务中的所有操作要么全部完成,要么全部不做,不能只完成一部分
C:consistency 一致性
事务执行前后,数据库必须保持完整性约束,数据处于合法状态
I:isolation 隔离性
多个事务并发执行时,互不干扰,事务的中间状态对其他事务不可见
D:durability 持久性
事务一旦提交,其结构永久保存在数据库中,及时系统崩溃也不会丢失
假设银行转账:
从账户 A 扣钱,同时给账户 B 加钱。
原子性:要么两步都成功,要么都不做。
一致性:转账后账户总金额不变。
隔离性:多个转账不会互相影响。
持久性:转账成功后,数据永久保存。
冲突
两个事务并发访问数据库的同一数据项,并且至少有一个事务对数据进行了写操作
丢失(更新)
两个事务同时读取同一个数据,然后都修改后写回数据库,其中一个事务的修改被另一个覆盖,导致前一次的更新丢失
(脏)修改
一个事务修改了数据,但是还没提交,另一个事务读取并修改了这部分未提交的数据,导致不一样
两次读不一致(不可重复读)
一个事务内两次读取同一条数据,中间另一个事务修改了这条数据并提交,导致两次读取结果不同
域完整性
数据库中每个属性(字段)必须符合该属性定义的取值范围和格式规则
数据库设计的步骤
需求分析
概念结构设计:E-R图设计
逻辑结构设计:转换E-R图为与DBMS相符的逻辑结构
物理结构设计:设计存取方法、设计关系、索引等物理结构
数据库实施:建立数据库,试运行,装数据
数据库运行和维护
连接
内连接
只保留AB表中匹配成功的行
SELECT * FROM A INNER JOIN B ON A.id = B.id;
自然连接
AB表中相同名字的属性自动进行等值连接
等值连接
内连接的一种,明确指定连接条件为=
SELECT * FROM A, B WHERE A.id = B.id;
外连接
左外连接
返回左表的所有记录,右边没有匹配的显示为NULL
SELECT * FROM A LEFT JOIN B ON A.id = B.id;
右外连接
SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
全外连接
SELECT * FROM A FULL OUTER JOIN B ON A.id = B.id;
sql语句
DDL:定义:create drop alter
DML:操作:select insert update delete
创建数据库
create database 库;
drop database 库;
show database ;
delete from 表 where 条件;
select * from 表 where 条件;
UPDATE Student
SET Sname = '张三'
WHERE Class = '计算机一班';
%
表示匹配任意长度的任意字符(零个或多个字符)
_
表示匹配任意单个字符(一个字符)
CREATE TABLE Student (
Sno CHAR(6) PRIMARY KEY, -- 学号,主键,固定6位字符
Sname VARCHAR(50) NOT NULL, -- 姓名,变长字符串,不允许为空
Gender CHAR(1) CHECK (Gender IN ('M','F')), -- 性别,限定只能是 'M' 或 'F'
Age INT CHECK (Age >= 0 AND Age <= 150), -- 年龄,整数,限制范围0~150
Email VARCHAR(100) UNIQUE, -- 邮箱,唯一约束
EnrollmentDate DATE DEFAULT CURRENT_DATE, -- 入学日期,默认当前日期
Phone VARCHAR(20) DEFAULT NULL, -- 电话,允许为空,默认NULL
ClassNo CHAR(4) NOT NULL, -- 班级编号,非空
CONSTRAINT FK_Class FOREIGN KEY (ClassNo) REFERENCES Class(ClassNo) -- 外键,关联班级表
);
INSERT INTO Student (Sno, Sname, Age)
VALUES
('1001', '张三', 18),
('1002', '李四', 19),
('1003', '王五', 17);
ALTER TABLE 表名 ADD 列名 数据类型[约束条件];
GRANT(授权)
GRANT 权限列表 ON 对象 TO 用户或角色;
GRANT SELECT, INSERT ON Employees TO user1;
REVOKE(撤销授权)
REVOKE 权限列表 ON 对象 FROM 用户或角色;
REVOKE INSERT ON Employees FROM user1;