什么是事务
张三给李四转账1000元
1张三转出1000
2李四转入1000
以上两步 要么同时成功 要么同时失败 这两步是不能分割的
数据库操作逻辑上不可分割的多条sql语句组成的整体 该整体中所有的sql语句要么全部成功 要么全部失败
通过关键字: rollback ,commit来控制
事务的特性
1原子性 事务是最小的单位 不能继续分割
2一致性 事务提交之前和提交之后 数据要保持一定的一致性
3持久性 事务一旦提交 那么数据就不可以恢复,会持久的保存在硬盘中
4隔离性 多个事务同时操作同一个数据的时候,那么多个事务之间要进行隔离
张三给李四转账1000 2000
李四给王五转账1000
--事务的隔离级别参照一下链接
https://www.cnblogs.com/huanongying/p/7021555.html
在数据库中创建一张表
account表
id username password money
int varchar varchar double
create table account(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
money double
);
insert into account values(null,‘user1’,‘123456’,10000);
insert into account values(null,‘user2’,‘654321’,10000);
事务控制实现代码
public class TestTransaction {
public static void main(String[] args) throws Exception {
Class.forName(“com.mysql.jdbc.Driver”);//反射获得加载驱动
Connection conn=DriverManager.getConnection(“jdbc:mysql://127.0.0.1:3306/mydb1”,“root”,“root”);//获得数据库连接
//设置事务手动提交
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
try {
//1张三转出1000
stat.executeUpdate(“update account set money = money -1000 where id =1”);
System.out.println(1/0);
//2李四转入1000
stat.executeUpdate(“update account set money = money +1000 where id =2”);
} catch (Exception e) {
//回滚事务
conn.rollback();
e.printStackTrace();
}finally{
//手动提交事务
conn.commit();
}
stat.close();
conn.close();
System.out.println(“执行结束”);
}
}