数据库的完整性和一致性

关系型数据库保证数据的完整性和一致性是最佳的。

完整性

  • 实体完整性:每个实体独一无二(主键/唯一索引)
  • 参照完整性 (引用完整性): 子表中不能有父表中没有的数据(外键)
  • 域完整性:数据都是有效数据(数据类型和长度,非空约束,默认值约束,检查约束)
-- 检查学生年龄是否为1到200的数字
stuage in check (stuage between 1 and 200) 
alter table tb_student add constraint;

一致性

数据的一致性用事务来实现。
事务:一系列对数据不可分割的操作(要么全做,要么全不做)

事务ACID特性:

atomicity 原子性不可分割
consistency 一致性前后数据状态保持一致
isolation 隔离性多个并发事务不知道彼此的中间状态
duration 持久性事务完成后,对数据的修改要持久化

并发事务访问数据可能产生的五大类问题:

  • 第一类丢失更新
  • 第二类丢失更新
  • 脏读(读脏数据)
  • 不可重复读
  • 幻读

解决:

  • 单版本并发控制-加锁-悲观锁-性能太差

  • 多版本并发控制(MVCC)- 乐观锁 - 不会经常遇到数据冲突 一条数据多个版本 -性能更好-需要冗余字段支持

    直接操作锁非常麻烦,设置事务隔离级别,数据库自动加合适的锁

事务隔离级别:

  • 读未提交
  • 读提交 --避免读到脏数据 oracle默认
  • 可重复读–避免幻读 mysql默认
  • 串行化–最高事务隔离级别,性能最差,无并发 ,悲观锁。

更多内容:参考这篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值