MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)
engine 引擎就是MySQL存储数据的不同方式
myisam 插入速度快 支持全文索引
innoDB 插入速度慢 支持事务安全
假设两人同时购买火车票,两人同时看到只有一张火车票,几乎同时下单
或
在银行转账时,张三转李四500元,两边必须都完成,转账才算完成,
张三少钱和李四多钱必须一致的,这个两个操作必须同时成功或同时失败,不能一个成功,而另一个失败
需要用到事务
建立两张完全一样的表,但是引擎不一样


各插入两条数据:
mysql> insert into a1
-> values
-> ('zhangsan', 2000),
-> ()
->
-> \c
mysql> insert into a1
-> values
-> ('张三', 3000),
-> ('李四', 2000);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> insert into a2
-> values
-> ('张三', 3000),
-> ('李四', 2000);
Query OK, 2 rows affected (0.07 sec)
Records: 2 Duplicates: 0 Warnings: 0

开启事务:



在两个窗口同时打开a2表(蓝色为第二个窗口)


当两步都完成时,这个事物才算完成
提交整个事务

在另一个窗口下可以也可以显示出结果

(之前的操作并没有任何特殊的地方,只是‘张三’转了1000给‘李四’,下面的操作才说明了
事务的一个特性【原子性】)
我们第二次再开启事务

这次要再给李四1000元

但因为网络故障,李四没收到钱,整体的转账操作,从逻辑上讲,张三白少了1000元
但张三的钱已经少了1000

那么‘张三’的钱还能不能回来呢?
答:可以!!!


张三的钱就《回滚》了
用黑色窗口和蓝色窗口来说明事务的隔离性
开启事务


在存进1000元时,如果在不按确定时,把刚存的钱取出,再按取消键,那么自己的刚存的钱是否会退出来呢

可以看出来,张三的钱并没有增加,说明了只要事务没有结束,从其他的方式询问该表,
数据是不会变的


只有当事务完成后,用其他方式访问该数据库才会显示结果


但在a1表实现刚才的操作就不会有效果(a1 engine myisam | a2 engine innodb)


可以看出,即使a1表没有停止事务,a1表增加的钱在其他窗口也能看见

事务的特性
原子性:2步或n步,要不都成功,要不都不成功
一致性:在转钱时,一个人加500, 而另一边没500块,那么这个操作就不能实现
隔离性:事务结束前,每一步带来的影响,别人都看不见
持久性:事务一旦完成,无法撤销
MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)的更多相关文章
- MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)
先建立一张 m 表 mysql> create table m ( -> mid int, -> hid int, -> gid int, ), -> matime da ...
- MySql cmd下的学习笔记 —— 有关select的操作(in, and, where, like等等)
为方便本节学习, 请先自行建立本表: 建一个商品表: create table goods ( -> goods_id mediumint(8) unsigned not null auto_i ...
- MySql cmd下的学习笔记 —— 有关修饰器的知识(trigger)
关于触发器的理解: 进行数据库应用软件的开发时,有时我们碰到表的某些数据的改变时,希望同时 引起其他相关数据改变的需求,利用触发器就能满足这样的需求. 触发器能在表中的某些特定数据变化时自动完成某些查 ...
- MySql cmd下的学习笔记 —— 有关视图的操作(algorithm)
建立一张简单的查询视图,不用临时表,只用条件合并 在简单的查询中,建立临时表的开销比较大 这是可以指定algorithm选项为merge 在v2的视图中,并没有建立临时表 但在下列情况下,必须建立临时 ...
- MySql cmd下的学习笔记 —— 有关子查询的操作(where型,from型,exists型子查询)
先找到goods表 查询goods_id最大的商品 where型的子查询 查询goods_id最大的商品(不能用排序) 把两步写成一步,就是子查询 from型子查询 查找出每种cat_id下goods ...
- MySql cmd下的学习笔记 —— 有关分组的操作(group by)
(一) 把建立的goods表找到 (二) 当cat_id = 3时,计算所有商品的库存量之和 计算每个cat_id下的库存量(group by) 需要用到分组,把每个红框内的计算在一起 筛选出本店价比 ...
- MySql cmd下的学习笔记 —— 有关select的操作(max, min等常见函数)
先把之前建的goods表找到 找到最贵的本店价(max) 找到最便宜的本店价(min) 查出一共还有多少商品(count) 查看商品价的平均价(avg) 查看本店有多少种商品 当count(*)时 输 ...
- MySql cmd下的学习笔记 —— 有关建立表的操作(有关于数据类型)
(01)建表的过程实际上是 声明字段 的过程 一. 列类型(字段): 存储同样的数据时,不同的列类型,所占据的空间和效率是不一样的,这就是建表时要考虑的意义. 二.MySQL三大列类型 数值型 ...
- MySql cmd下的学习笔记 —— 有关表的操作(对表中数据的增,删,改,查)
(知识回顾) 连接数据库 mysql -uroot -p111 先建立一个新库 create database test1; use test1; 由于今天的主要内容是表的操作,建立表的详细过程不是本 ...
随机推荐
- echarts如何给柱形图的每个柱子设置不同颜色
总结下这几日用echarts库作基本图形遇到的一些问题. echarts快速上手可参考官网: http://echarts.baidu.com/tutorial.html#5%20%E5%88%86% ...
- c#反射(2)
public void Test1() { string ClassName="Person"; string MethodName="Test1"; //得到 ...
- python自动化开发-[第二十三天]-初识爬虫
今日概要: 1.爬汽车之家的新闻资讯 2.爬github和chouti 3.requests和beautifulsoup 4.轮询和长轮询 5.django request.POST和request. ...
- chrome截图全网页
1.F12 2.ctrl+shift+p 3.输入:capture 4.选择Capture full size screenshot
- nGrinder TestRunnerInsertMysqlSingle.groovy
s C:\Users\Lindows\workspace\GroovyTest\src\com\iteye\lindows\mysql\TestRunnerInsertMysqlSingle.groo ...
- java读取配置文件信息
ResourceBundle resource = ResourceBundle.getBundle("shopxx");//不要加.properties后缀,我加了报错 reso ...
- Web项目发布的一些设置
比如我们有个项目想要发布到互联网上,我们首先需要购买域名以及主机,主机的话,推荐云主机(本人推荐西部数码或者阿里云),性能好: 我们先在云主机上搭建环境,比如Mysql,Jdk,Tomcat: 然后我 ...
- a标签与js的冲突
如上图,需要做一个页面,点击左边的标题,右边就显示左边标题下的子标题的集合, html代码如下: <div id="newleft"> <ul> <l ...
- 使用CROS解决跨域问题
使用jq的话,设置ajax这两个属性即可. 第一个为使用crossDomain,第二个属性使其可以传输cookie $.ajaxSetup({ crossDomain: true, xhrFields ...
- 解决centos7命令行中文乱码
-------------centos7解决中文乱码问题[root@localhost ~]# cat /etc/locale.conf LANG=en_US.UTF-8[root@localhost ...