事务的四大特征:
原子性:把多个操作,打包成一个整体。整体要么执行成功,要不一个都不执行。
一致性:数据的完整性和业务逻辑的正确性。(账要对的上)
隔离性:数据库“一心多用”,同时处理多个事务,事务之间的隔离级别会导致不同的并发问题,如脏读(事务a针对某个表做出了一些修改,在a提交前,b读到了,后面a的操作有吧数据进行修改,解决办法:写加锁),不 可重复读(a先提交,b在读的时候,a又改了,解决办法:读加锁),幻读(a提交数据,b进行读数据,c对a进行新增/删除数据,导致b读到的数据集不同。解决办法:“串行化”)
持久性:把数据存储在硬盘上,程序/主机重启,数据仍然能存在。执行事务对数据库产生的修改,就会在硬盘上持久保存,重启后依然存在。
写操作加锁:执行a的过程中,b不能执行,降低了脏读的可能性,提高了隔离性,提高了数据的准确性。
读操作加锁:原理同上。
回滚机制:如果运行到一半出问题了,数据库能够自动的吧前面的sql造成的影响给恢复回去。
日志类似于保存
四个隔离级别:
1)read uncommitted:允许读取其他事务未提交的数据
2)read committed:只能读取其他事务提交后的数据
3)repeatable read:针对读操作和写操作都加锁了
4)串行化(serializable):所有的事务都是串行执行的