事务是什么?
1.事务是数据库系统区别其他一切文件系统的重要特性之一。比如有一个文件在我们修改的过程中,主机奔溃了,重启主机后,这个文件的数据是可以恢复的,保持一致性的。很多文件系统无法做到这个一致性。
2.事务是一组具有原子性的SQL语句。具有原子性的一组SQL语句是,这组SQL里面只要有一条语句不成功,那么这组所有语句都不成功,都要回滚。
事务四要素
1.原子性
具有原子性的一组SQL语句是,这组SQL里面只要有一条语句不成功,那么这组所有语句都不成功,都要回滚。
2.一致性
比如账户转账1000块,另外一个账户就多了1000块。这个总金额还是1000块,这个总金额这个数在事务前和事务后都是一致的。
3.隔离性
隔离性要求一个事务对数据库中数据的修改,在未提交完成前对于其他事务时不可见的。
SQL中定义了4种隔离性:
未提交读(READ UNCOMMITED) 表示一个事务修改的数据,但是这个事务还没提交。另外一个事务可以访问到这些已经被修改后的数据。
已提交读 (READ COMMITED) oracle SQL等数据库默认的事务隔离。 表示一个事务对数据的插入和修改,在还没提交前,对其他事务是不可见的。
可重复读 (REPEATABLE READ) 表示一个事务对数据的插入和修改,在还没提交前,对其他事务是不可见的。(他和已提交读的区别在于,先开启一个事务,查询指定的数据,但是一直不提交,然后另外一个事务对指定的这些数据进行插入和修改并且提交,那么第一个事务再次查询这些指定的数据时,还是查询不到第二个事务已经修改和插入的数据。而已提交读是可以查询到第二个事务已经修改或提交的数据的。)---innodb默认事务隔离级别
可串行化(SERIALIZABLE) 这个才是真正的隔离性,但是隔离性太强,对每行数据都锁,所以数据库基本不用
4.持久性
事务提交后,数据保存在数据库,即使数据库崩溃了,已经提交的修改数据也不会丢失。
大事务
运行时间长,处理数据很多,这个事务就是大事务
风险:锁定数据多,造成阻塞和锁超时。如果执行过程种,出现了问题,回滚时间也长。主从同步延迟也长(mysql都是主执行完,再同步到从,从再执行一样的语句)
解决办法:
1.不要一次性处理大批量数据,分多次处理
2.移除不必要的select数据,精确select相关的数据
网友评论