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

  • 【1】mysql事物的介绍
  • 【2】mysql事务处理的方法
  • 【3】mysql是u用InnoDB使用事务

生命不息,学习不止


【1】mysql事物的介绍

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


【2】mysql事务处理的方法

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

== 以下几句要深入理解==

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


举例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; -- 保存点1insert into mytest values(5,'test05');savepoint s2;-- 保存点2insert into mytest values(6,'test06');rollback to s2; -- 回滚s2  即代码只执行s2 所以test06无法插入commit;


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

-- 禁止事务的自动提交set autocommit = 0;insert into mytest values(7,'test07');rollback; -- 事务回滚set autocommit = 0;insert into mytest values(8,'test08');-- 查看select *from mytest;


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

-- 禁止事务的自动提交set autocommit = 0;insert into mytest values(7,'test07');rollback; -- 事务回滚set autocommit = 0;insert into mytest values(8,'test08');commit; -- 提交事务-- 查看select *from mytest;



【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_1select balance into money from readerinfo where card_id = cid; -- 查询读者信息表余额赋值给moneyset 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 thenrollback; -- 回滚 以上操作全部取消else commit;-- 提交事务 执行成功end if;end//delimiter ;-- 查看相关表select *from bookinfo;select *from borrowinfo;select *from readerinfo;-- 条用储存过程call borrowproc('52242855555',1);


图书信息表

== 读者信息表==

== 借阅信息表==


坚持,最后还剩两节了