mysql day4 -事务

事务

什么是事务?

        事务就是将一组sql语句放到同一批次去执行,如果一个sql语句出错,则该批次内所有sql语句取消执行。

事务的特点:

         一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会失败,数据库数据就会回滚到事务开始之前的状态。

事务的限制

         mysql中只有InnoDB和BDB的数据库表支持事务

事务的ACID原则

 原子性,一致性,隔离性,持久性。

原子性:

        意味着数据库中的事务执行是作为原子粒度。即不可再分,整个语句要么执行,要么不执行。( 一个事务必须视为不可分割的最小工作单位。从开启事务,直到提交该事务,其间不管进行了多少次数据库的增、删、改、查的操作都视为一个整体,要么都执行,要么都不执行。 主要依赖undo log来实现原子性。

一致性:

        指的是事务开始之前,以及事务结束之后,事务的完整性约束没有被破坏。(事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。主要是指数据处于一种语义上的有意义且正确的状态,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的。主要是通过原子性、隔离性、持久性保证数据库状态的一致性。

隔离性:

        事务的执行是互不干扰的,一个事务执行时,不可能看到其它事务运行的某个时刻的数据。(:主要是指多个事务之间相互独立,互不干扰。事务隔离分为不同级别,包括未提交读(Read uncommitted)、已提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。主要依赖的是MVCC或者锁来实现的隔离性。)  并发执行的各个事务互不干扰

持久性:

        指的是事务在成功执行完成之后,对数据库的操作更改会持久地保存在数据库中,并不会回滚。指一个事务一旦成功提交,它对数据库中的数据的改变是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。主要依赖的是redo log来保证持久性

Acid大佬总结

mysql实现事务的步骤:

1set autocommit =0  关闭Mysql自动提交

#2:开启事务(可选)
start transaction;
#2举例↓:编写事务中的sql语句(insert、update、delete)
#这里实现一下"李二给王五转账"的事务过程
update t_account set balance = 50 where vname = "李二";
update t_account set balance = 130 where vname = "王五";
#3:结束事务
#3.1
commit; #提交事务
# 3.2rollback; #回滚事务:就是事务不执行,回滚到事务执行前的状态

4set autocommit = 1 开启MySQL自动提交

事物的隔离性:

        为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离,事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行。

实现事务隔离性的方式-锁

        通常数据库里都是采用 的机制,保证事务之间的隔离性。

MySQL中的锁

        基于锁的属性分类:共享锁(读锁、S锁)、排他锁(写锁,X锁)。
        基于锁的粒度分类:表锁、行锁(记录锁、间隙锁、临键锁)。
        基于锁的状态分类:意向共享锁、意向排它锁。

事务的隔离级别

事务并发问题:

在事务并发执行的时候,如果不进行事务隔离,那么就会产生脏写、脏读、重复读、幻读的问题。

事务的隔离级别详解:

        1. READ_UNCOMMITTED        读未提交

         2. READ_COMMITTED            读提交(不可重复读)

         3. REPEATABLE_READ           可重复读
         4. SERIALIZABLE                     串行化
三言两语说不清,详见哔哩哔哩大学的相关教学。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值