数据库事务

概述

* 事务是数据库提供的一个特性。     

* 事务:组成各个数据的执行的单元,要么都成功,要么都不成功。

Mysql中操作事务的方式

1.使用命令

* start transaction;        ‐‐ 开启事务         

* sql1;   

* sql2;

* commit;                   ‐‐ 提供事务(事务已经结束了,数据永久的保存到数据库中了)         

* rollback;                 ‐‐ 回滚事务(事务已经结束了,数据回滚到最初始化的状态) 

2.设置事务默认不提交

 * MySQL数据库的事务是默认提交的。

* show variables like '%commit%';       ‐‐ 查看事务的是事务是否是默认提交 

* update t_account set money = money ‐ 1000 where username = '冠希'; ‐‐ 这一条语句在JDBC中操作事务(掌握)   事务的特性(理解)

* update t_account set money = money ‐ 1000 where username = '冠希'; ‐‐ 这一条语句 默认使用了一个事务。                           

* 设置让MySQL的数据库的事务不默认提交             

  * set autocommit = off或者0           ‐‐ 设置MySQL事务的事务不默认提交         

* 编写SQL语句(执行完,都没有提交)             

  * sql1             

  * sql2         

* 需要手动的提交或者回顾             

  * commit;             

  * rollback;  

在JDBC中设置事务

1.操作事务,需要掌握的是Connection接口,提供了方法

* void setAutoCommit(boolean autoCommit)  ‐‐ 如果传入了false,设置了MySQL数据 库的事务不默认提交的。                          

* void commit()                                         ‐‐ 提交事务     

* void rollback()                                       ‐‐ 回滚事务  

2.Connection接口的2个作用     

  * 操作数据库,都需要使用Connection接口     

  * 管理事务

事务的特性

事务的特性:   

  原子性:原子性对应的英文是Atomicity,即表示事务中所有操作是不可再分割的原子单位。事务中所有操作要么全 部执行成功,要么全部执行失败;     

  一致性:一致性对应的英文是Consistency,事务执行后,数据库状态与其它业务规则保持一致。例如转账业务,无 论事务执行成功与否,参与转账的两个账号余额之和应该是不变的;   

  隔离性:隔离性对应的英文是Isolation,是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不 会相互干扰;   

  持久性:持久性对应的英文是Durability,指的是一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据 库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据  

1.事务的特性     

  * 原子性       ‐‐ 强调的是事务的不可分割的特性     

  * 一致性       ‐‐ 强调的是事务执行前后数据需要保证一致     

  * 隔离性       ‐‐ 强调的是多个事务同时操作一条记录,事务之间不能互相干扰     

  * 持久性       ‐‐ 强调的是事务一旦结束了,数据将永久的保存到数据库中  

2.这些特性都是数据库提供的

不考虑事务的隔离性会引发的问题

1.脏读:一个事务读取到了另一个事务未提交的数据!

2.不可重复读:一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调的是update,修改记录 的数据。

3.虚度(幻读):一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调是insert,向表中添 加一条数据。

 设置事务的隔离级别

1.事务的隔离级别(设置数据库的隔离级别,根据级别的不同,解决上述的读的问题)     

  * Read uncommitted      ‐‐ 什么都解决不了     

  * Read committed        ‐‐ 避免脏读,但是不可重复读和虚读有可能产生     

  * Repeatable read       ‐‐ 避免脏读和不可重复读,虚度有可能产生的     

  * Serializable          ‐‐ 避免各种读  

2.4种隔离级别有安全性和效率     

  * 安全    Serializable > Repeatable read > Read committed > Read uncommitted     

  * 效率    Serializable < Repeatable read < Read committed < Read uncommitted  

3.数据库都有自己默认的隔离级别     

  * MySQL的数据库,默认的隔离级别是Repeatable read,避免脏读和不可重复读。

posted @ 2025-02-11 15:31  茴香儿  阅读(24)  评论(0)    收藏  举报