mysql 事务的应用场景和事务的使用

Mysql事务主要用于解决并发环境下数据一致性问题。事务包括BEGIN、COMMIT、ROLLBACK语句,确保操作的原子性、一致性、隔离性和持久性(ACID)。通过实例展示了如何在SQL中使用事务进行数据操作,强调事务开启与提交的重要性,以及事务日志在实现原子性中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql 事务

什么情况下用事务:

1 事务的提出主要是为了解决并发情况下保持数据一致性的问题(类似于多线程)
事务(Transaction)是并发控制的基本单位。所谓的事务,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。 。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

事务和程序的关系:事务和程序是两个概念。一般地讲,一个程序中包含多个事务。
针对上面的描述可以看出,

2.事务的语句
在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。  开始事务:BEGIN TRANSACTION(事务)
提交事务:COMMIT TRANSACTION(事务)
回滚事务:ROLLBACK TRANSACTION(事务)3.事务的4个属性
   Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败(减款,增款必须一起完成)。
●   Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。事务的运行并不改变数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。
●   Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
●   Durability(持久性):事务完成之后,它对于 系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库

1 通俗的事务,指的是一组操作要么都成功执行,要么不成功执行,不可分割—原子性

2 在所有操作没有执行完毕之前,其他会话不能看到中间的过程---隔离性

Create table account(

Id int,

Name varchar(10),

Money int

)engine=innodb charset=utf8;

 

Insert into account values (1,'李三',3000),(2,'赵四',3000);

 

Alter table account drop money; //修改列

Alter table account add money tinyint unsigned not null default200;

Update account set money = money -100 where id =1; //给李三减去100
Update account set money = money +100 where id =2;//给赵四加上100

 

由于定义的是tinyint 的格式,的范围是0-255
Show variables like ‘%mode%’;

现在用的模式是严格模式,如果改成了非严格模式,它会直接截取到255,就是数值超过了255,由于上线就是255 所以直接截取到255

3 事务发生之前和发生之后,数据总额匹配(不能是相等,还兴许扣手续费呢)—一致性
4 事务已经发生了, 事务产生的影响是不能撤销的(eg:卡号输入错了,打钱给了别的人,只能通过私底下要回来只能通过一个“补偿性事务”,原来的事务也不能撤销,只能通过法院或者其他的途径要回,但是已经不是原来的事务了)---持久性
ACID 就是四种特性

事务的语法 :
alter table account CHANGE money money int;
修改money 列的数据类型是int
开启事务:
Start transaction;
表中原来的数据

Update account set money = money +500 where id =2;//给赵四加上500
Update account set money = money -500 where id =1; //给李三减去500
Sql语句必须要和开启事务在一个窗口,换一个窗口的话,事务就不生效了
执行了update 以后还是

就是在一个事务中只要是事务开启了以后就要满足事务的隔离性

Comit /rollback; 之后事务就结束了,下一次事务要重新开启

Commit 之后如下图

 

Start transaction;

Update account set money = money -500 where id =1;

Update account set money = money +500 where id =2;

rollback; 是什么也不会发生的

下面的方式,会自动提交

 

如果出现了Starttransaction; 上一个事务会自动提交 就是隐式提交

事务的基本原理为什么可以实现原子性:

 

原来没有应用事务的时候的原理是:

Update 语句->运行update 语句以后是直接作用到数据文件上,所以才能直接看到表的数据的变化。

用了事务以后:

Update 语句->作用到事务日志文件上(记录sql 1,sql2... 的影响)---当提交的时候才作用到表的数据文件上

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值