美文网首页
数据库概念总结

数据库概念总结

作者: Apple_Boy | 来源:发表于2019-07-05 14:41 被阅读0次

    总的可以分为这几个部分(记忆为3344):

    三大范式   三个SQL语言集

    四个完整性约束    四个数据库的事务特性

    三大范式:

    第一范式:

    原子性:是指每列的数据不能再分裂出其他的列

    例如:联系人的中的姓名,电话,性别,其中电话不属于第一范式,要属于第一范式的话就要对电话在进一步分裂(姓名,性别,手机,家庭电话)

    第二范式:

    在满足第一范式的情况下,每一列的数据都与主键有关系

    例如:订单的编号,生产编号,价格,生产日期,其中生产编号与订单的信息没有直接关系所以可以去掉

    第三范式:

    在满足第二范式的情况下,所有的列都与主键有关(这个关系是指全部满足对主键的关系而不是部分)也不依赖于其他主键

    例如订单的信息(订单号,产品,单价,顾客姓名,顾客编码),其中顾客姓名与顾客编码相关所以应该吧顾客姓名去除

    三个SQL语言集:

    DDL:数据定义语言,创建,删除,修改表

    DML:数据操纵语言,增删改查(或者分为DML增删改和DQL查)

    DCL:数据控制语言,授权 ,收权

    四个完整性约束:

    完整性约束:数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。数据完整性分为四类:

    实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)、用户定义的完整性(User-definedIntegrity)

    实体完整性(Entity Integrity):实体完整性规定表的每一行在表中是唯一的实体。

    在数据表中可以对相应字段进行如下约束来实现实体完整性:

    UNIQUE(唯一约束)

    PRIMARY KEY(主键约束)

    IDENTITY(标识列)

    域完整性(Domain Integrity):是指数据库表中的列必须满足某种特定的数据类型或约束。

    域完整性有以下几种约束:

    CHECK(检查约束)

    FOREIGN KEY(外键约束)

    DEFAULT(默认值约束)

    NOT NULL(不为空值约束)

    参照完整性(Referential Integrity):是指两个表的主关键字和外关键字的数据应对应一致。

    参照完整性作用表现在如下几个方面:

    禁止在从表中插入包含主表中不存在的关键字的数据行

    禁止会导致从表中的相应值孤立的主表中的外关键字值改变

    禁止删除在从表中的有对应记录的主表记录

    用户定义的完整性(User-defined Integrity):是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。用户自己定义的,比如年龄大小在0-100,人民币面值最大为100

    四个数据库的事务特性:

    在这之前先说一下事务的概念:

    在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。

    判断事务是否配置成功的关键点在于出现异常时事务是否会回滚,事务的隔离性是指一个事务的执行不能被其他事务干扰。

    为了让多个SQL语句作为一个事务执行:

    (1)执行语句前调用 Connection 对象的 setAutoCommit(false);

    以取消自动提交事务

    (2)在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务

    (3)在出现异常时,调用 rollback(); 方法回滚事务。

    数据库事务需要满足四个特性,ACID,

    原子性(Atomic):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    一致性(Consistency)::在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

    隔离性(Isolation):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据(指一个事务的执行不能被其他事务干扰)

    持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

    不考虑事务的隔离性,会发生的问题:

    1,脏读,是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

    2,不可重复读,是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

    不可重复读和脏读的区别:脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。

    3,虚读(幻读)是事务非独立执行时发生的一种现象。在当前事务中,读取到了另一事务提交的插入的数据

    幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

    MySQL数据库为我们提供的四种隔离级别:

      ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

      ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。默认的

      ③ Read committed (读已提交):可避免脏读的发生。

      ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

    以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。像Serializable这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况。在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。

    相关文章

      网友评论

          本文标题:数据库概念总结

          本文链接:https://www.haomeiwen.com/subject/pifehctx.html