MySQL数据库的事务与存储引擎(第十二章)

1 事务的介绍

事务的概念
事务的特性
MySQL中控制事务处理的关键字
MySQL事务处理的两种方法
演示事务的一些操作:
创建一张表mytest:

create table mytest(
	id int primary key,
    name varchar(20)
);

向表mytest中添加两条数据:

BEGIN;
INSERT INTO mytest(id, NAME) VALUES(1, 'test01');
INSERT INTO mytest(id, NAME) VALUES(2, 'test02');
COMMIT;

此时查看表mytest中的数据:
查看表mytest中的数据1
回滚操作演示:
再向表mytest中插入一条数据:

BEGIN;
INSERT INTO mytest(id, NAME) VALUES(3, 'test03');

再查看表中数据:
查看表mytest中的数据2
进行回滚操作:

-- 回滚事务
ROLLBACK;

查看表中数据会发现之前插入的那条数据没有插入成功!
查看表mytest中的数据3
注意:回滚事务的操作的前提是事务还没有提交,如果事务已经提交,那么回滚事务的操作就会失败!
事务提交之前,进行回滚事务的操作时,我们也可以自定义还原点,让事务回滚到之前的某个状态。

BEGIN;
INSERT INTO mytest(id, NAME) VALUES(4, 'test04');
-- 定义事务的还原点s1
SAVEPOINT s1;
INSERT INTO mytest(id, NAME) VALUES(5, 'test05');
-- 定义事务的还原点s2
SAVEPOINT s2;
INSERT INTO mytest(id, NAME) VALUES(6, 'test06');
-- 定义事务的还原点s3
SAVEPOINT s3;
-- 还原到还原点s2
ROLLBACK TO s2;
-- 提交事务
COMMIT;

查看表mytest中数据:
查看表mytest中的数据4
查看数据会发现:id为6的这条数据没有插入成功,这就是自定义还原点的用途。
也可以通过以下方式开启手动提交事务:

-- 开启手动事务
SET autocommit = 0;
INSERT INTO mytest VALUES(7, 'test07');
-- 还没提交就可以成功回滚事务
ROLLBACK;

查看表中数据:
查看表mytest中的数据5
手动提交事务:

-- 开启手动事务
SET autocommit = 0;
INSERT INTO mytest VALUES(8, 'test08');
-- 提交事务
COMMIT;

查看表数据:
查看表mytest中的数据6

2 通过InnoDB使用事务

在这里插入图片描述
在这里插入图片描述
在操作前我们先查看3张表中的数据:

SELECT * FROM borrowinfo;
SELECT * FROM bookinfo;
SELECT * FROM readerinfo;

借阅信息表borrowinfo:
借阅信息表
图书信息表bookinfo:
图书信息表
读者信息表readerinfo:
读者信息表

-- 使用存储过程实现上述要求
DELIMITER //
CREATE PROCEDURE borrowProcedure(IN cardId CHAR(18), IN bookId INT)
BEGIN
DECLARE store_num INT;
DECLARE money FLOAT(7, 3);
SELECT store INTO store_num FROM bookinfo WHERE book_id = bookId;
SELECT balance INTO money FROM readerinfo WHERE card_id = cardId;
-- 开启手动事务
SET autocommit = 0;
-- 插入一条借阅信息
INSERT INTO borrowinfo VALUES(bookId, cardId, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 3 MONTH), '否');
-- 更新图书信息表
UPDATE bookinfo SET store = store - 1 WHERE book_id = bookId;
-- 更新读者信息表
UPDATE readerinfo SET balance = balance - (SELECT price FROM bookinfo WHERE book_id = bookId) * 0.05 WHERE card_id = cardId;
-- 判断库存和读者金额
IF store_num = 0 OR money <= 200 THEN
-- 回滚事务(库存和金额不符合要求)
	ROLLBACK;
ELSE
-- 提交事务(库存和金额符合要求)
	COMMIT;
END IF;
END //
DELIMITER ;

调用存储过程:

-- 调用存储过程
CALL borrowProcedure('210210199901014444', 20151101);

然后再次查看3张表中数据:
调用存储过程
如果我们再次调用存储过程:

CALL borrowProcedure('210210199901017777', 20151101);

调用存储过程之后再查看3张表会发现表中的数据没变。为什么呢?这是因为身份证号为"210210199901017777"的这位读者的余额<=200,引发了事务回滚操作。

3 存储引擎的介绍

存储引擎的概念
Mysql的存储引擎
可以通过以下方式查看MySQL的默认存储引擎:

-- 查看MySQL的默认存储引擎
SHOW VARIABLES LIKE 'default_storage_engine';

结果:
MySQL的默认存储引擎
Mysql支持的存储引擎
通过以下方式查看MySQL支持的存储引擎:

-- 查看数据库的存储引擎信息
SHOW ENGINES;

结果:
Mysql支持的存储引擎
InnoDB存储引擎
MyISAM存储引擎
MEMORY存储引擎

4 如何设置存储引擎

存储引擎的选择
设置存储引擎1
配置文件my.ini一般是在系统盘C盘的ProgramData文件夹下,如果找不到,则说说明该文件夹被隐藏了,进行如下操作:
显示ProgramData文件夹
然后找到配置文件my.ini文件:
查找my.ini文件
找到my.ini文件,打开后进行如下设置:
设置储存引擎
设置好存储引擎之后,使用cmd打开windows的dos窗口,重启MySQL服务:
重启MySQL服务
此时再次查看MySQL的存储引擎:

show variables like 'default_storage_engine';

结果:
查看MySQL的存储引擎
会发现,MySQL的存储引擎已经变为MyISM了。
设置存储引擎2

-- 设置客户端的存储引擎
SET default_storage_engine = MYISAM;

结果:
设置客户端的存储引擎
注意:SET方式只能在此次连接中有效,如果关闭连接再次登录数据库,会发现之前设置的储存引擎已经失效。
设置存储引擎3

-- 创建表的同时设置存储引擎
CREATE TABLE storageTest(
id INT PRIMARY KEY,
NAME VARCHAR(20)
)ENGINE=MYISAM DEFAULT CHARSET = utf8;
-- 查看表的存储引擎信息
SHOW TABLE STATUS FROM book WHERE NAME = 'storageTest';

结果:
查看表的存储引擎信息
设置存储引擎4

-- 更改表的存储引擎
ALTER TABLE storageTest ENGINE = INNODB;

然后查看表的存储引擎:
查看表的存储引擎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值