事务
MySQL:每一条语句都属于独立事务,默认自动管理提交的。
如果需要把多条语句当成一个整体,那么就需要把多条语句放在一个事务里面
开启事务:start transaction
提交事务:commit;
回滚事务:rollback
JDBC控制事务语句
Connection.setAutoCommit(false); //start transaction
Connection.rollback(); // rollback
Connection.commit(); // commit
事务的特点
事务的特性:ACID 原子性( Atomicity )[ˌætəˈmɪsəti]、一致性( Consistency )[kənˈsɪstənsi]、隔离性( Isolation )[ˌaɪsəˈleɪʃn]和持久性( Durability )[dərəˈbɪlɪti] 原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都完成,要么都不完成 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。 隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性:指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。 事务的隔离级别: 属于事务的。都已开启了事务为前提。 不考虑事务的隔离级别,会出现以下的情况
要想避免以上现象,通过更改事务的隔离级别来避免:
设置当前会话事务隔离级别 set transaction isolation level REPEATABLE READ; 级别依次升高,效率依次降低。 MySQL:默认REPEATABLE READ ORACLE:默认READ COMMITTED MySQL: SELECT @@SESSION.transaction_isolation;//查看当前的隔离级别 set transaction isolation level 级别;// 设置当前的事务隔离级别 练习:read uncommitted; cmd开启两个窗口,分别进去mysql 输入 mysql -u 用户名 -p 然后回车 输入密码 然后回车 T1表示窗口一输入的内容,T2表示窗口二输入的内容 按照从上往下的顺序执行表格中的sql,可以看到脏读和不可重复读,虚读/幻读的情况
|
JDBC设置隔离级别
Connection对象,在开启事务之前进行设置 |
批处理 --- 批量处理sql语句
在jdbc的url中添加rewriteBatchedStatements=true参数,可以提高批处理执行效率。 在我们进行大批量数据操作的时候,需要采用批处理的方式来提高程序的运行性能,目的是减少跟数据库交互的次数
|
JDBC操作大数据
批处理 + 事务 |