事务(Transaction
)是数据库区别于文件系统的重要特性之一。 sql
数据库引入事务的主要目的:事务会把数据库从一种抑制状态转换为另外一种一致状态。在数据库提交工做时,这种机制可以保证在一组的sql语句要么都成功执行、要么都不执行。数据库
事务用来保证数据库的完整性性能
atomicity
):事务中全部操做要么所有成功,要么所有失败consistency
):从一种状态转变为下一种一致状态。事务开始前和结束后,数据库的完整性约束没有被破坏。isolation
):一个事务的影响在提交前对其余事务都不可见Durability
):一旦提交,结果就是永久性的。InnoDB
中的事务彻底符合ACID
的特性atom
数据库事务的隔离级别有4种,由低到高分别是:spa
Read uncommitted
)read committed
)repeatable read
)Serializable
)Read uncommitted
)容许脏读,就是一个事务能够读取另外一个未提交事务的数据。code
eg:对象
老板要给员工发工资,员工的工资是3000/月。可是发工资时老板不当心按错了数字,按成5000/月,可是该事务尚未提交,就在这时,员工去查看本身这个月的工资,发现(5000)比往常多了2千元,觉得涨工资了很是高兴。
read committed
)只能读取到已经提交的数据(就是事务要等另外一个事物提交后才能读取数据)
eg:blog
小明拿着工资卡去超市购物(卡里固然是只有3000),当他卖单时(事务开启),收费系统事先检测到他的卡里有3000,就在这个时候!!小明的对象把卡里的钱所有转了出去,并提交事物(提交完成)。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了。
repeatable read
)就是在开始读取数据(事物开启)时,再也不容许修改操做。事务
eg:ci
小明拿着工资卡去超市购物(卡里固然是只有3000),当他卖单时(事务开启,不容许其余事务的UPDATE修改操做),收费系统事先检测到他的卡里有3000。这个时候任何人不能转出金额了。接下来收费系统就能够扣款了。
Serializable
)最高的事务隔离级别,在该级别下,事务串行化顺序执行,读写相互都会阻塞。可是这种事务隔离级别效率低下,比较耗数据库性能,通常不用。
eg:
小明拿着工资卡去ATM机(卡里固然是只有3000),当他取钱时(事务开启),ATM查询到他的卡里有3000。这个时候在向卡里存200。此时 只有当查的事物完成时,存的事物才会执行。
简单来讲: 事物就是在数据库提交工做时,要么全部修改都保存,要么全部修改都不保存。