什么是事务
事务的定义是一个独立的逻辑工作单元。由必须作为一个整体的SQL语句集合组成,要么一起成功要么一起失败。举个常见的例子银行转账。例如,一个客户小S给大S转账50000人民币,首先要把小S账户减掉50000人民币,再把大S账户添加50000人民币。这就需要两个更新成功才能完成。为了保证数据的正确性。必须两个都成功,或者都失败,如果更新都没成功,则需要回滚。如果是一小S的账户更新成功,而大S的账户没有更新成功。则数据就没有一致性了。
事务的ACID属性
事务的ACID是个属性分别是:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability).
原子性是指事务必须要么同事执行成功,要么同时执行失败。
一致性是指事务从一个一致性状态到另一个一致性状态。(可以用能量守恒定律来说,就是小S少50000,别人肯定会多50000)
隔离性是指一个事务带来的影响未提交之前,对别的事务都是不可见的。不过事务隔离性有隔离级别一说。
持久性是指经过提交的事务永久性生效。
事务隔离级别
隔离级别 脏读 不可重复读 幻读
未提交读 是 是 是
提交读 否 是 是
可重复读 否 否 是
序列化 否 否 否
脏读是指 一个事务对数据库做了修改,但未提交。其他事务可以读到数据的变化。但是A事务有可能永远不提交。所以其他事务读取的数据就是脏数据。
不可重复读是指第一个事务对数据做了读取,后面进入第二个事务对数据做了修改。而第一个事务第二次执行同样的查询时得到的数据不一样了,这就是不可重复读。
幻读是指一个事务一个查询第二次执行,但返回了满足条件的过滤标准的记录。就是幻读。
说白了,未提交读是指事务除去不可同时写,能够随便读,是事务的修改对别人是可见的。提交读是指 只能读到提交之后的数据,也就是事务的修改对别人是不可见的。可重复读是指事务查询的数据,不让别人做修改,从而保证在同一事务下得到的相同数据不会改变。为什么是相同数据呢?因为还有幻读的可能,数据库还是可以做插入操作的。序列化就是不让别的事务对同一数据集合的所在表做任何DML操作。
根据个人理解,如有不当望多多指教!