事务的隔离级别由低到高的顺序:
1、Read uncommitted(读未提交的):最低级别,任何情况都无法保证;
2、Read committed(读已提交的):可避免脏读的发生;
3、Repeatable read(可重复读):可避免脏读和不可重复读的发生;
4、Serializable(串行化):可避免脏读、幻读、不可重复读的发生;
脏读:一个事务读取了另个事务没有提交的数据。
不可重复读:在一个事务内多次查询同一个数据,返回结果不一样,读取到了另一个事务修改提交的数据。
幻读:一个事物内读取了别的事务插入的数据,导致查询的数据整体前后不一样。
mysql支持的事务隔离级别:以上四种都支持,默认事务隔离级别是Repeatable read:
Oracle支持的事务隔离级别:Read committed和Serializable,还有只读模式,只读事务只能看到事务执行前就已经提交的数据,且事务中不能执行 INSERT , UPDATE ,及 DELETE 语句。其中默认的事务隔离级别是Read committed。
由于事务隔离级别越高,导致数据库执行效率低,数据库并发就会受到影响,可以用加锁来实现数据库的并发,当事务在对某个数据进行事务操作前,现象系统申请请求对该数据进行加锁,加锁之后次事务就对该数据具有一定的控制权,直到该事物释放了锁,其他事务才能对其数据进行新的操作。
oracle的数据库锁分为:
dml锁:用于保护数据的完整性;
ddl锁:用于保护数据库对象的结构,比如表和索引等结构的定义。
数据库锁的机制:
s锁:对数据加了s锁,其他事务可以读取该数据,但是不能修改。
x锁:对数据加了该排他锁后,其他事务不能对该数据进行读取和修改。