首页 > 代码库 > 基础-事务

基础-事务

事务是什么,它的作用?

  事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中的各种数据项的一个程序执行单元。这些单元要么全部成功,要么全都不成功。

通过事务,可以保证我们的一件事情的所有单元片段都成功或都不成功。

可以保证我们的数据完整性。

 

Mysql中默认是一条sql一个事务。

 Mysql中手动事务处理

start transaction 开启事务

commit; 提交事务

rollback; 事务回滚

 回滚点:

得到回滚点

Connection.setSavePoint();

指定回滚

Connection.rollback(Savepoint);

 

务特性(ACID)

原子性: 不可以在分割,是一个整体

 一致性: 它说的是数据在前后要一致。

 隔离性: 多个事务在操作时,不能相互影响

 持久性: 数据一旦提交,就持久化到数据库中了。

 

如果不考虑事务的隔离性,会出现什么问题?

脏读  一个事务读取到了另一个事务未提交的数据。

不可重复读 它说的是事务在读取数据时多次读取到的不一致。(update

虚读(幻读) 它说的是事务在读取数据时多次读取到的不一致(insert)

 

 介绍四种隔离级别

Read uncommitted 这种级别什么问题也解决不了

Read committed  它可以解决脏读

Repeatable read  它可以解决脏读及不可重复读

Serializable    它可以解决所有问题,它叫串行化.

 

mysql数据库默认的事务隔离级别-----repeatable read级别.

oracle数据默认的事务隔离级别 ----read committed

 

 对于隔离级别四种

安全性  SerializableRepeatable readread committed read uncommitted;

性能  SerializableRepeatable readread committed read uncommitted;

在开发中,一般使用  read committed  repeatable read两种。

 

ThreadLocal

 

它的底层是使用了一个Map集合

Map<Thread,Object>

它的key就是当前的线程对象.

 set(Object obj) 它就相当于  map.put(Thread.currentThread(),obj);

 get()它就相当于 map.get(Thread.currentThread()));

 连接池(DataSource) 数据源

 jdbc中关于数据库的操作涉及到两个包  java.sql  javax.sql

 

javax.sql包下有一个 DataSource

所有的支持java的连接池都应该实现javax.sql.DataSource接口,在这个接口中提供了一个方法  getConnection()它就是获取一个连接对象的。

 

如果连接对象Connection是通过连接池获取的,当通过Connection对象调用close()方法时,不再是销毁连接对象,而是将连接对象放回到连接池。

 

dbcp连接池   c3p0连接池

基础-事务