事务特性及隔离问题
今天是学习计划的第三天,今天打算继续昨天探讨的事务问题。 所以,今天的学习内容是事务特性及隔离问题。 那事务都具有哪些特性呢? 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性:事务前后数据的完整性必须保持一致。 隔离性:事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。 持久性:持久性是指一个事务一旦提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。 多个线程开启各自事务操作数据库中的数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。如果不考虑隔离,可能会引发如下问题。 脏读 指一个事务读取了另外一个事务未提交的数据。 这是非常危险的。举个例子:假设A向B转账100元,对应的sql语句如下 update account set money = money - 100 where name = 'a'; update account set money = money + 100 where name = 'b'; 当第一条sql语句执行完,第二条还没执行(A未提交时),如果此时B查询自己的账户,就会发现自己多了100元钱,如果A等B走后再回滚,B就会以为转账成功了,但是钱又返还给了A,从而导致B损失100元