码迷,mamicode.com
首页 > 数据库 > 详细

mysql数据库关于事物的问题?求解答

时间:2019-01-10 10:45:39      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:art   cti   key   ODB   分享   name   span   llb   tab   

表格代码:

CREATE TABLE `t_teacher` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `deposit` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8;

一个表格如下:

技术分享图片                技术分享图片

操作代码如下:

代码1:

START TRANSACTION;
SELECT * FROM t_teacher;
UPDATE t_teacher SET deposit = deposit+100 WHERE name =老李;
INSERT INTO t_teacher(id,name,deposit) VALUES (8,老张,7000);
ROLLBACK;
COMMIT;

代码2:

START TRANSACTION;
SELECT * FROM t_teacher;
UPDATE t_teacher SET deposit = deposit+100 WHERE name =老李;
INSERT INTO t_teacher(name,deposit) VALUES (老张,7000);
ROLLBACK;
COMMIT;

2个代码不同点在于第4行;单独执行时代码1不能成功执行,代码2能成功执行。

若是将代码1和代码2分别先执行1遍,由于 ROLLBACK 的影响,数据库不会发生改变。

若是在代码1执行1遍后,在只执行 COMMIT; 后,会造成数据库的值改变,其结果相当于执行了行3;

但是在代码2执行1便后,在执行 COMMIT;  后,数据库的值不发生改变。

请问这是什么原因?



mysql数据库关于事物的问题?求解答

标签:art   cti   key   ODB   分享   name   span   llb   tab   

原文地址:https://www.cnblogs.com/mh9413/p/10245537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!