事务

事务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

AAtomic,原子性  要么都成功要么都失败

CConsistency,一致性  

IIsolation,隔离性   事务互相隔离互不影响

DDurability,持久性   提交后不可再回滚 没意义


---隔离性

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 


假如被锁上的话 再打开结果会  超时 

你可能感兴趣的:(事务)