事务transaction
自动事务(默认) 手动事务
手动事务的操作流程
【1】开启事务:start transaction;
【2】进行事务操作
【3】关闭事务
01 提交事务:commit; 同步数据表,表示操作成功
02 回滚事务:rollback; 直接清空日志表,表示操作失败
事务操作原理
事务开启之后,所有的操作都会临时保存到事务日志,而事务日志只有在得到commit命令才会同步到数据表,其他任何情况都会清空,比如rollback、断电、断开连接
---创建一个账户表
create table my_account(
id int primary key auto_increment,
number char(16) not null unique comment '账户',
name varchar (20) not null,
money decimal(10,2) default 0.0 comment ‘帐户余额’
)charset utf8
--插入数据
insert into my_account calues
(null,'000000000001','张三','1000'),
(null,'000000000002','李四','2000');
---张三转账1000给李四
updata my_account set money = money - 1000 where id = 1;
--事务安全
--开启事件
start transaction;
--事务操作 1 李四账户减少
updata my_account set money = money - 1000 where id = 2
--事务操作 2 张三账户增加
updata my_account set money = money + 1000 where id = 1 ,
--提交事务
commit
--回滚点操作
--开启事务
start transaction;
--事务处理1 张三发工资 加钱
updata my_account set money = money - 1000 * 0.05 where id = 2;---错误
-- 回滚到回滚点
rollback to spl;
-- 继续操作
updata my_accont set money = money -1000 * 0.05 where id = 1;
---- 查看结果
select * from my_account;
--- 提交结果
commit ;
回滚点
设置回滚点语法:savepoint 回滚点名字;
回到回滚点语法:rollback to 回滚点名字;
--显示系统变量autocommit(模糊查询)
自动事务处理
show variables like 'autocommit';
关闭自动提交:set autocommit=off/0;
--关闭事务自动提交
set autocommit = 1
updata my_account set money = money - 1000 * 005 where id = 2
事务的四大特性:ACID
A:Atomic,原子性 要么都成功要么都失败
C:Consistency,一致性
I:Isolation,隔离性 事务互相隔离互不影响
D:Durability,持久性 提交后不可再回滚 没意义
---隔离性
start transaction
--给张三返税,反500
updata my_account set momney = money + 500 where id = 1 ;
start transaction
---李四淘宝花了500
updata my_account set money = mnoney -500 where id = 2
select * from my_account
select * from my_account
rollback
select * from my_account
锁机制(隔离性)
start transaction;
updata my_account set money = money + 1000 where name = ‘ 张三’ ;
select * from my_account;
updata my_account set
假如被锁上的话 再打开结果会 超时