理解识记部分

数据模型三要素

数据结构、数据操作、数据约束。

数据库设计中逻辑设计、概念设计、物理设计阶段的任务分别是什么?

概念设计

  • 在概念数据库设计阶段,将对用户的需求进行综合、归纳、抽象,形成概念模型。
  • 概念模型使设计人员摆脱数据库系统的具体技术问题,将精力集中在分析数据及数据之间联系等方面。
  • 一般通过绘制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];