事务(transation)的知识点

本文详细介绍了数据库事务的概念、特性及操作方式,并深入探讨了四种不同的事务隔离级别及其应用场景。

定义

·        一个最小的不可再分的工作单元

·        通常一个事务对应一个完整的业务

·        一个完整的业务需要批量的DML语句(Insert updatedelete..)语句共同完成

·        事务只和dml语句有关

·        需要多少dml语句与业务逻辑有关

举例

银行的转账业务,涉及两个账户的修改,所以要么都修改成功,要么都不修改

 

事务的四个特性(ACID)

原子性Atomicity

事务是最小的工作单元,不可再分

一致性Consistency

要求所有的dml语句必须同时成功或者同时失败

隔离性Isolation

两个事务之间具有隔离

持久性Durability

事务的保证,事务终结的标志(把内存的修改写到硬盘)

 

事务中的术语

开启事务

Start  transation

事务结束

End transation

提交事务

Commit transation

回滚事务

Rollback transation

 

与事务操作有关的重要sql

Commit    rollback

 

工作过程

事务在进行的过程中,dml语句并不会修改数据库中的数据,只是记录在了历史操作中,在内存中记录了下来,只有事务成功结束才会修改硬盘数据,失败则不做任何修改。

 

事务结束的标志

·        提交(commit) 成功结束并修改了数据库

·        回滚(rollback) 以失败告终,dml语句全部清空

 

事务开启的标志

任何一条dml语句的执行都标志着一个事务的开启

 

mysql中手动开启事务

由于mysql数据库中,默认情况下事务是自动提交的,所以需要开启手动提交

手动提交事务:

Start transation;(或set autocommit=off;)

Blablabla……..(dml)

Commit;

 

事务的四个隔离级别(隔离性)

       首先需要阐述什么是脏数据,什么是脏读,脏数据顾名思义是不好的数据,其概念出现在事务之中,是指一些毫无用处的数据,简言之是不该读到的数据,举个例子,两个事务ab,a事务在读出数据库数据并进行了更新,但是由于a事务出现某种异常,需要回滚,但是ba回滚之前读取了这个数据,那么b拿到的数据就是不准确的即被称为脏数据,这个行为就是脏读。

·        读未提交(read uncommited)(隔离性低)

         事务b还没有提交的数据,事务a就可以读到,此时由于事务a并未结束,可能会进行回滚操作,因此这里读到的就有可能是脏数据,一般数据库隔离都高于这个级别。

·        读已提交(read commited)(中)(oracle默认级别)

         事务b提交的数据事务a才能读到,避免了脏数据,但是会导致不可重复读,此处不可重复读理解为事务a读过数据之后,如果事务b更改了数据,事务a再去读,就会和之前读到的数据不同。

·        可重复读(repeatable read)(高)

         事务b提交事务a也读不到,事务a可重复读,此时数据库近乎隔离开来,事务a单独保留数据库数据,就算事务b对原始数据库进行了修改,a事务仍能读取保存的这个未被更改的数据库数据。

·        串行化(serializable)(很高)

         事务b操作数据库时,事务a只能排队,吞吐量太低,所以基本不用。

 

设置事务的隔离级别

·        修改my.ini配置文件,在mysqld下面添加

        transation-isolation = read-uncommited(事务隔离级别的英语)

·        通过命令

        Set   [无/session/global]  transation isolation level  read-uncommited

 

查看事务的隔离级别(当前会话)

    Select @@tx_isolation

    Select @@session.tx.isolation

查看全局的隔离级别

    Select  @@global.tx.isolation

 

 

 

 

### 事务的概念及其重要性 在计算机科学和数据库系统中,事务是一个操作序列,该序列必须全部完成或完全不执行。这一特性确保数据的一致性和可靠性[^2]。 #### ACID属性 为了保障事务的有效运行,通常遵循ACID原则: - **原子性 (Atomicity)**:整个事务要么全部成功,要么失败回滚到初始状态。 - **一致性 (Consistency)**:事务前后保持系统的完整性约束条件不变。 - **隔离性 (Isolation)**:并行执行多个事务时,各事务间互不影响。具体而言,当某个事务尝试访问另一未提交事务正在修改的数据项时,前者不受后者的影响[^3]。 - **持久性 (Durability)**:一旦事务提交,则其效果永久保存下来,即使发生系统崩溃也不会丢失已确认的结果。 #### 并发控制机制 为实现上述性质中的隔离级别,在多用户环境下需采用有效的并发控制策略来管理不同进程间的交互行为。常见的方法有锁协议、时间戳排序以及多版本并发控制(MVCC),它们通过不同的手段防止冲突更新和其他潜在问题的发生。 ```sql BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 'A'; UPDATE accounts SET balance = balance + 100 WHERE account_id = 'B'; COMMIT; ``` 此SQL脚本展示了如何在一个银行转账场景下创建一个简单的事务流程,其中包含了两个账户之间的资金转移过程。只有当这两个更新语句都顺利完成之后才会正式生效;反之则会触发回滚动作取消所有更改。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值