理解识记部分
数据模型三要素
数据结构、数据操作、数据约束。
数据库设计中逻辑设计、概念设计、物理设计阶段的任务分别是什么?
概念设计
- 在概念数据库设计阶段,将对用户的需求进行综合、归纳、抽象,形成概念模型。
- 概念模型使设计人员摆脱数据库系统的具体技术问题,将精力集中在分析数据及数据之间联系等方面。
一般通过绘制E-R图,直观呈现数据库设计人员对用户需求的理解。
逻辑设计
逻辑数据库设计面向数据库系统,在概念数据库设计中完成E-R图等成果后,将其转换为DBMS支持的数据模型(如关系模型),完成实体、属性和联系的转换。
在进行逻辑数据库设计师,应遵循一下规范化理论,如范式;
- 不规范的设计可能会导致数据库出现大量冗余、插入异常、删除异常等问题
物理设计
- 物理数据库设计阶段需要确定数据库的存储结构、文件类型等。
- 通常DBMS为了保证其独立性与可移植性,承担了大部分任务。
- 数据库设计人员只需要考虑硬件、操作系统的特性,为数据表选择合适的存储引擎,为字段选择合适的数据类型等,以及评估磁盘空间需求等工作。
事务的隔离性、原子性、一致性分别指什么?
概述
事务必须满足A、C、I、D四个特性
- Atomicity:原子性
- Consisttency:一致性
- Isolation:隔离性
- Durability:持久性
原子性
一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。
事务中如果有任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库的状态退回到执行事务前的状态。
一致性
一致性是指在事务处理时,无论执行成功还是失败,都要保证数据库系统处于一致的状态,保证数据库系统从不返回到一个未处理的事务中。
MySQL中的一致性主要由日志机制实现的,通过日志记录数据库的所有变化,为事务恢复提供了跟踪记录。
隔离性
隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。
隔离性相关的技术有并发控制、可串行化、锁等。当多个用户并发访问数据库时,数据库为每一一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性
持久性是指事务一旦提交,其对数据库的修改就是永久性的。事务的持久性不能做到百分百的持久,只能从事务本身的角度来保证永久性,而一些外部原因导致数据库发生故障,如硬盘损坏,那么所有提交的数据可能都会丢失。
候选键、实体完整性、参照完整性、事务、死锁、视图、1NF、2NF、3NF、BCNF的概念。
候选键
在关系模型中,候选键又称候选码(英语:candidate key),能唯一标识元组并且不含多余属性的属性集称为候选键。
实体完整性
要求关系中的主键不能重复,且不能取空值。空值是指不知道、不存在或无意义的值。
参照完整性
要求关系中的外键要么取空值,要么取被参照关系中的某个元组的主键值。
用户自定义完整性
是用户针对具体应用环境定义的完整性约束条件,由DBMS(数据库管理系统)检查自定义的完整性。
范式
第一范式(1NF)
指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值,或不能有重复的属性。
第一范式遵从原子性,属性不可再分。
第二范式(2NF)
是在第一范式的基础上建立起来的,满足第二范式必须先满足第一范式。第二范式要求实体属性完全依赖于主键,不能仅依赖主键的一部分(对于复合主键)。
在满足第一范式的前提下,第二范式遵从唯一性,非主键字段需完全依赖主键。
第三范式(3NF)
是在第二范式的基础上建立起来的,满足第三范式必须先满足第二范式。第二范式要求一个数据表中每一列数据都和主键直接相关,而不能间接相关。
在满足第二范式的前提下,第三范式就是非主键字段不能相互依赖。
视图
视图是从一个或多个表中导出来的表。它是一种虚拟存在的表,表的结构和数据都依赖于基本表。
事务
事务是针对数据库的一组操作,它可以由一条或多条SQL语句组成。
在默认情况下,用户执行的每一条SQL语句都会被当成单独的事务自动提交。
死锁
当有许多用户并发访问数据库时,如果两个用户相互等待对方的数据,就产生了一个死锁。检测到死锁之后,会选择一个事务进行回滚。选择依据:看哪个事务的权重最小。
事务权重计算方法:
- 事务加的锁最少;
- 事务写的日志最少;
- 事务开启的日期最晚。
将源表的表结构复制到新表的命令
create table [new_table_name] like [origin_table_name];
如:create table sc2 like sc1;
将源表的表结构和表数据复制到新表的命令
create table [new_table_name] select from [origin_table_name];
如:create table sc2 select from sc1;
修改表结构的命令:如何添加字段、删除字段、添加索引
添加字段
alter table [table_name] add [column_name] [typeof column];
删除字段
alter table [table_name] drop column [column_name];
添加索引
create [unique|fulltext|spatial] index [index_name] on [table_name] (index_column_name,…);
索引类型:唯一、全文、空间
创建表的同时创建索引
create table sc (id int(6) not null auto_increment,name char(6) not null,age int(10) not null,primary key(id),unique index name_index(name),index dep_index(name(1)));
index dep_index(name(1)) 前缀索引
alter table 语句创建索引
alter table sc add index mark(name,age);
什么是插入异常、删除异常?
插入异常
删除异常
关系模式规范化中的删除异常是将不应该删除的数据被删除。
查看表的详细定义命令
show create table [table_name];
查看表基本定义的命令
desc [table_name];
