数据库概念总结

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

三大范式 三个SQL语言集

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

三大范式:

第一范式:

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

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

第二范式:

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

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

第三范式:

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

例如订单的信息(订单号,产品,单价,顾客姓名,顾客编码),其中顾客姓名与顾客编码相关所以应该吧顾客姓名去除
总结:
第一范式:(1NF)无重复的列
第二范式:(2NF)属性完全依赖于主键
第三范式:(3NF)属性不依赖于其它非主属性

三个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(); 方法回滚事务。

img

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

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

一致性(Consistency): 一致性指事务将数据库从一种状态转变为另一种一致的状态。在事务开始之前和事务结束以后,数据库的完整性约束(实体,域,参照完整性,用户自定义)没有被破坏。

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

持久性(Durability): 在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
高可用和高可靠:
但若不是数据库本身发生故障,而是一-些外部的原因,如RAID卡损坏、自然灾害等原因导致数据库发生问题,那么所有提交的数据可能都会丢失。因此持久性保证事务系统的高可靠性(HighReliability),而不是高
可用性(High Availability)。对于高可用性的实现,事务本身并不能保证,需要-一些系统共同配合来完成。

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

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

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

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

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

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

img

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

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

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

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

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Apple_Web

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值