• 【MySQL 第十二天 事务的介绍|InnoDB使用事务】


    在这里插入图片描述

    生命不息,学习不止


    【1】mysql事物的介绍

    在这里插入图片描述

    atomicity 原子性:所有事情是统一的整体,必须一起执行,或者都不执行
    consistency:一致性 -》数据需要保证一致性
    isolation :隔离性 -》对其他不显示
    durability:持久性 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述


    【2】mysql事务处理的方法

    【1】 rollback:n. 回降;削减;还原;回退
    v. 还原;回退
    【2】 commit:v. 犯;干;使(人;组织)作出保证;使承担义务;约束;交托;托付;托运
    【3】identifier: n. 鉴定人;识别人;鉴定物;识别物;认同者;支持者;标识符
    【4】savepoint : 保存点
    【5】rollback TO identifier: 回滚到标识符
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    == 以下几句要深入理解==
    在这里插入图片描述

    【1】start transaction : 开始交易
    【2】autocommit : 自动提交
    
    • 1
    • 2

    在这里插入图片描述


    举例1

    -- 创建表 插入数据
    create table mytest(
    	id int primary key,
    	name varchar(30)
    );
    
    -- 开始事务
    begin;
    insert into mytest values(1,'test01');
    insert into mytest values(2,'test02');
    commit; -- 提交事务
    
    -- 查看
    select *from mytest;
    
    -- 插入数据
    begin;
    insert into mytest values(3,'test03');
    rollback;
    
    begin;
    insert into mytest values(4,'test04');
    savepoint s1; -- 保存点1
    insert into mytest values(5,'test05');
    savepoint s2;-- 保存点2
    insert into mytest values(6,'test06');
    rollback to s2; -- 回滚s2  即代码只执行s2 所以test06无法插入
    commit;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    在这里插入图片描述


    举例2 从不同的平台查看事务 体现事务的隔离性

    
    
    -- 禁止事务的自动提交
    set autocommit = 0;
    insert into mytest values(7,'test07');
    rollback; -- 事务回滚
    
    
    set autocommit = 0;
    insert into mytest values(8,'test08');
    
    
    -- 查看
    select *from mytest;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    在这里插入图片描述

    == 解决上面例子,添加提交事务,使得其他平台可见==

    -- 禁止事务的自动提交
    set autocommit = 0;
    insert into mytest values(7,'test07');
    rollback; -- 事务回滚
    
    
    set autocommit = 0;
    insert into mytest values(8,'test08');
    commit; -- 提交事务
    
    -- 查看
    select *from mytest;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    在这里插入图片描述


    【3】mysql是u用InnoDB使用事务

    在这里插入图片描述
    在这里插入图片描述

    改变前

    图书信息表
    在这里插入图片描述
    == 读者信息表==
    在这里插入图片描述

    == 借阅信息表==
    在这里插入图片描述

    改变后

    delimiter //
    create procedure borrowproc(in cid char(18),in bid int)
    begin 
    declare store_1 int;
    declare money float(7,3);
    select store into store_1 from  bookinfo where book_id = bid; -- 查询图书信息表价格并赋值给store_1
    select balance into money from readerinfo where card_id = cid; -- 查询读者信息表余额赋值给money
    set autocommit = 0;	-- 禁止自动提交 必须认为手动
    insert into borrowinfo values(bid,cid,curdate(),date_add(curdate(),interval 1 month),'否'); -- 插入借阅信息表book_id card_id 当前日期 还书日期 一个月 否 
    update bookinfo set store = store-1 where book_id = bid; -- 图书信息表 图书库存减一 更新值
    update readerinfo set balance =  balance - (select price from bookinfo where book_id = bid)*(0.05) where  card_id = cid; -- 读者信息表余额插入更新
    
    if store_1 = 0 or money <= 200 then
    	rollback; -- 回滚 以上操作全部取消
    else 
    	commit;	-- 提交事务 执行成功
    end if;
    end//
    delimiter ;
    
    -- 查看相关表
    select *from bookinfo;
    select *from borrowinfo;
    select *from readerinfo;
    
    -- 条用储存过程
    call borrowproc('52242855555',1);
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述


    图书信息表
    在这里插入图片描述

    == 读者信息表==
    在这里插入图片描述

    == 借阅信息表==
    在这里插入图片描述


    坚持,最后还剩两节了

  • 相关阅读:
    Splunk的CIM是什么?
    go语言 | 图解字节青训营抖音(一)
    LabVIEW样式检查表1
    Open vSwitch: 深入解析现代网络虚拟化的核心
    Mysql常见日志作用
    Android SVGA动画
    计算机网络快速复习
    22【数据库连接池】
    【Mysql高级特性】InnoDB Checkpoint与 Redo log
    接口设计与优化
  • 原文地址:https://blog.csdn.net/m0_45463480/article/details/127603977