mysql(十二):mysql 事务

Mysql 事务

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... 的影响)---当提交的时候才作用到表的数据文件上

猜你喜欢

转载自blog.csdn.net/qq_20610631/article/details/82057072