对于数据库来说,关系型数据库对于保证数据完整性和一致性方面表现是最好的!
数据的完整性
数据的一致性:
数据的一致性通过事务实现 —> 一系列的对数据进行的不可分割的操作,要么全做,要么全部做
事务的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;
如果觉得《关系型数据库保证数据完整性和一致性的方法》对你有帮助,请点赞、收藏,并留下你的观点哦!