事物的特征
ACID
原子性 Atomicity :一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。
一致性 Consistency :在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器)、级联回滚等。
隔离性 Isolation :数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性 Durability :事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
隔离级别
脏读:一个事务可以读取到另一个事务未提交的数据。这种隔离级别岁最不安全的一种,因为未提交的事务是存在回滚的情况。
不可重复读:一个事务因为读取到另一个事务已提交的修改数据,导致在当前事务的不同时间读取同一条数据获取的结果不一致。
幻读:一个事物读可以读取到其他事务提交的数据,但是在RR隔离级别下,当前读取此条数据只可读取一次,在当前事务中,不论读取多少次,数据任然是第一次读取的值,不会因为在第一次读取之后,其他事务再修改提交此数据而产生改变。因此也成为幻读,因为读出来的数据并不一定就是最新的数据。
原文参考:https://mp.weixin.qq.com/s/CZHuGT4sKs_QHD_bv3BfAQ
优化
当查询大量数据,且分页的初始值比较大的时候,可以采用子查询的方式。
select * from test a inner join (select id from test where val=4 limit 300000,5) b on a.id=b.id;
手动连接数据库
package learnFromBilibili;
import java.sql.*;
/**
* 手动连接 mysql -> 简单查询 -> 关闭连接
* @author tony fan
*/
public class ManualConnectMysql {
public static void main(String[] args) throws Exception {
// 使用反射创建 DriverManager 类
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false",
"root","123456");
PreparedStatement preparedStatement = connection.prepareStatement("select * from account");
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
System.out.println(resultSet.getString("name"));
}
resultSet.close();
preparedStatement.close();
connection.close();
}
}