数据库基础

数据库的三范式:

第一范式(1NF):字段的原子性

概念:

  • 数据库表中的字段都是单一属性的,不可再分。

说明:

  • 单一属性的类型包括整型、字符型、逻辑型、日期型等。注:集合、数组等类型不属于单一属性的类型。

        
第二范式(2NF):记录的唯一性

前提:

  • 满足第二范式的前提是先满足第一范式。        

概念:

  • 非主属性必须完全依赖于主键。

说明:

  • 主键可能由多个属性构成,完全依赖指不存在非主属性依赖于主键中的某一部分属性。


第三范式(3NF):非主属性不依赖于其它非主属性

前提:

  • 满足第三范式的前提是先满足第二范式。        

概念:

  • 任何非主属性不依赖于其它非主属性,否则会出现数据的冗余。

说明:

  • 第二范式和第三范式都是在说 非主属性对其它属性的依赖关系:
    • 第二范式的关键在于:非主属性是否是完全依赖主属性。
    •  第三范式的关键在于:非主属性是直接依赖于主属性还是直接依赖于其它非主属性。

事务:

概念:

  • 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。

特性:

  • A:原子性(Atomicity):说明事务是一个不可分割的单位。
  • C:一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态.
  • *I:隔离性(Isolation):一个事务不能被其他事务打扰。
  • D:持久性(Durability):事务一旦提交,就应该被永久保存起来。

事务的隔离级别:

概念:

  • 多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。

实现:

  • MySQL中Innodb引擎通过数据库锁(表锁、行锁、间隙锁)来实现事务的隔离。

相关概念:

脏读:指一个事务读到了另一个事务中未提交的数据。

不可重复读:在一个事务内读取表中的某一行数据,多次读取的结果不同,重点是修改

  • 说明:脏读是读取了另一个事务中未提交的脏数据,不可重复读是读取了另一个事务已提交了的数据。

幻读(虚读):在一个事务内读取到了另一个事务插入的数据,导致前后读取的记录数不一致,重点在于新增或者删除

隔离级别:

  • 未提交读(READ UNCOMMITTED):脏读、不可重复读、幻读都有可能发生。  
    • 特点:隔离级别最低,并发性能高。
  • 提交读/不可重复读(READ COMMITTED):能避免脏读,不可重复读、幻读都有可能发生。
    • 特点:锁定正在读取的行 ,Oracle默认的隔离级别。
  • 可重复读(REPEATABLE READ):能避免脏读、不可重复度,幻读有可能发生。
    • 特点:锁定所读取的所有行,MySQL默认的隔离级别。
    • 注意:MySQL的InnoDB引擎中,隔离级别为可重复读(REPEATABLE READ)时,通过间隙锁已经解决了幻读的问题。
  • 串行化(SERIALIZABLE):能避免脏读、不可重复度、幻读。
    • 特点:每次访问都会锁表。

查看/设置隔离级别的语句:

  • 查看当前事务的隔离级别:    select @@tx_isolation;
  • 设置当前事务隔离级别:        set transaction isolation level 隔离级别;


   


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值