- 一、事务的ACID属性
- 二、四种隔离级别
- 三、Java设置数据库隔离级别
-
原子性atomicity
原子性是事务一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生 -
一致性consistency
事务必须使数据库从一个一致性状态变换到另外一个一致性状态 -
隔离性 isolation
事务的隔离性指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰 -
持久性 durability
持久性指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
- 查看当前的隔离级别
select @@transaction_isolation select @@global.transaction_isolation
- 设置当前mysql连接的隔离级别
set transaction isolation level read committed;
- 设置数据库系统全局的隔离级别
set transaction isolation level read committed;三、Java设置数据库隔离级别
@Test
public void testTransactionSelect() throws Exception {
Connection conn=JDBCUtils.getConnection();
// System.out.println(conn.getTransactionIsolation());
String sql="select user,password,balance from user_table where user=?";
ArrayList users = getInstance(conn, User.class, sql, "CC");
for(User u:users)
{
System.out.println(u);
}
}
@Test
public void testTransactionUpdate() throws Exception {
Connection conn=JDBCUtils.getConnection();
conn.setAutoCommit(false);
//设置数据库隔离级别
conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
String sql="update user_table set balance=? where user=?";
update(conn,sql,4000,"CC");
System.out.println("修改结束");
}
//考虑事务的查询 version2.0
public ArrayList getInstance(Connection conn,Class cl, String sql, Object...args) throws Exception
{
//Connection conn= null;
PreparedStatement ps = null;
ResultSet resultSet = null;
try {
conn = JDBCUtils.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
for(int i=0;i list=new ArrayList<>();
while (resultSet.next())
{
//创建一个对象,属于cl类
T t = cl.newInstance();
for(int i=0;i 


