事务是什么,它的作用?
事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中的各种数据项的一个程序执行单元。这些单元要么全部成功,要么全都不成功。
通过事务,可以保证我们的一件事情的所有单元片段都成功或都不成功。
可以保证我们的数据完整性。
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
对于隔离级别四种
安全性 Serializable》Repeatable read》read committed 》read uncommitted;
性能 Serializable《Repeatable read《read 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连接池