1.数据库事务是什么?
事务由单独单元的一个或者多个SQL语句组成,在这个单元中,
每一个MySQL语句都是相互依赖的。而整个单独单元作为一个不可分割的整体,
如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。
所有受到影响的数据将返回事务开始以前的状态;如果单元中的所有SQL语句均执行成功,则事务被顺利执行。
2.事务的特征?
原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,
事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另一个一致性状态。
隔离性(Isolation)
事务的隔离性是指一个事务的执行不能被其它事务干扰,
即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,
并发执行的各个事务之间不能互相干扰。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
3.事务的隔离级别?
未提交读:在读取数据时不会加任何锁,也不会进行检测,可能会读到没有提交的数据。
已提交读:只读取提交的数据等待其他事物释放排他锁,读数据的共享锁在读操作完成后会立即释放。这个隔离级别是sql server默认的隔离级别。
可重复读:像已提交读一样,但共享锁会保持到事物结束才会释放。
可串行读:类似于可重复读,但锁不仅会锁定所查询的数据,也会锁定所查询的范围,这样就阻止了新数据插入所查询的范围。
脏读:一个事务读取了另一个事务未提交的数据
不可重复读:就是在一个事务范围内,两次相同的查询会返回两个不同的数据,是因为在此间隔内有其他事务对数据进行了修改。
幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样.
不可重复读和幻读的区别:
不可重复读(总结):在一个事务中多次读取同一个数据时,结果出现不一致
幻读(总结):在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。