失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 关系型数据库保证数据完整性和一致性的方法

关系型数据库保证数据完整性和一致性的方法

时间:2019-04-05 21:31:08

相关推荐

关系型数据库保证数据完整性和一致性的方法

对于数据库来说,关系型数据库对于保证数据完整性和一致性方面表现是最好的!

数据的完整性

数据的一致性:

数据的一致性通过事务实现 —> 一系列的对数据进行的不可分割的操作,要么全做,要么全部做

事务的ACID特性:

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

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

如何解决这五类问题

单版本并发控制 - 锁 - 悲观锁 - 性能太差多版本并发控制(MVCC)- 乐观锁 - 性能更好 - 需要冗余字段来支持

直接操作锁非常的麻烦,我们可以通过设置事务隔离级别的方式,让数据库自动选择合适的锁机制来保护数据。

MySQL如何查看和修改事务隔离级别(transaction —> tx)

在Linux环境下验证不同事物隔离级别的特性所需要使用到的命令

linux下面验证的场景举例:

数据库连接:mysql -u root -p

第一个实验场景:读脏数据

事物A:begin;update tb_emp set sal=2800 where eno = 1359;事物B:set session transaction isolation level read committed;begin;select * from tb_emp; --->读脏数据commit;事物A:rollback;

第二个实验场景:不可重复读

事物B:set session transaction isolation level read committed;begin;select * from tb_emp where sal<3000;事物A:begin;update tb_emp set sal=3800 where eno=1359;commit;事物B:select * from tb_emp where sal<3000; --->没有1359对应的记录了,不可重复读commit;

第三个实验场景:可以重复读

事物B:set session transaction isolation level repeatable read;begin;select * from tb_emp where sal<3000;事物A:begin;update tb_emp set sal=3800 where eno=1359;commit;事物B:select * from tb_emp where sal<3000; --->还可以读到最开始使用select使用此命令读到的内容commit;

如果觉得《关系型数据库保证数据完整性和一致性的方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。