1.什么是事物
事务是数据库提供的一个特性。
组成事务的各个执行的单元,要么都成功,要么都不成功。
例如:你给我转1000元钱,先给你的账户余额减去1000元,在给我的账户余额减掉1000.这个过程就是一个数据库事物
2。MySQL数据库中使用事务,提供两种方式
第一种方式:设置让MySQL的数据库的事务不默认提交
MySQL数据库的事务是默认提交的,也就是一条sql语句一个事物
set autocommit = off或者0 -- 设置MySQL事务的事务不默认提交
编写SQL语句(执行完,都没有提交)
sql1 sql2 sql... sqln
需要手动的提交或者回顾
commit;
rollback;
第二种方式:开启事物
start transaction; -- 开启事务
sql1 sql2 sql... sqln
commit; -- 提供事务(事务已经结束了,数据永久的保存到数据库中了)
rollback; -- 回滚事务(事务已经结束了,数据回滚到最初始化的状态)
3。在JDBC中操作事务
Connection接口的2个作用
第一个作用:操作数据库,都需要使用Connection接口
第二个作用:管理事务
void setAutoCommit(boolean autoCommit) -- 如果传入了false,设置了MySQL数据库的事务不默认提交的。
void commit() -- 提交事务
void rollback() -- 回滚事务
4.事务的4个特性
第一个特性: 原子性 -- 强调的是事务的不可分割的特性
第二个特性:一致性 -- 强调的是事务执行前后数据需要保证一致
第三个特性: 隔离性 -- 强调的是多个事务同时操作一条记录,事务之间不能互相干扰
第四个特性:持久性 -- 强调的是事务一旦结束了,数据将永久的保存到数据库中

5.不考虑事务的隔离性会引发的问题有3个
第一个问题:脏读:一个事务读取到了另一个事务未提交的数据!
第二个问题:不可重复读:一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调的是update,修改记录的数据。
第三个问题:虚读(幻读):一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调是insert,向表中添加一条数据

6.为了解决隔离性引发的问题,解决办法是设置数据库的隔离级别
7.数据库的隔离级别有四种
Read uncommitted -- 什么都解决不了
Read committed -- 避免脏读,但是不可重复读和虚读有可能产生
Repeatable read -- 避免脏读和不可重复读,虚度有可能产生的
Serializable -- 避免各种读
8.4种隔离级别有安全性和效率
安全 Serializable > Repeatable read > Read committed > Read uncommitted
效率 Serializable < Repeatable read < Read committed < Read uncommitted
9.如何设置数据库的隔离级别
MySQL的数据库,默认的隔离级别是Repeatable read,避免脏读和不可重复读
set session transaction isolation level 事物的隔离级别;