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; 由于今天的主要内容是表的操作,建立表的详细过程不是本 ...
随机推荐
- 数据库 价格字段 设置 decimal(8,2),价格为100W,只显示999999.99
DECIMAL(M,D),M是数字最大位数,D是小数点右侧数字个数,整数M-D位 decimal(8,2)数值范围是 -999999.99 ~ 999999.99 1000000超过了6位,严格模式下 ...
- JDBC调用MySQL的调用过程CallableStatement
调用过程可以当作函数理解,具体参考本人博文https://www.cnblogs.com/xixixing/p/9720261.html MySQL的test数据库中已经创建好存储过程p2(n),实现 ...
- Qt ------ linux(ubuntu) 下用 linuxdeployqt 打包发布程序
https://github.com/probonopd/linuxdeployqt/releases 1.下载linuxdeployqt 2.把下载的文件放入 /usr/local/bin 内,并执 ...
- 实战Google深度学习框架-C5-MNIST数字识别问题
5.1 MNIST数据处理 MNIST是NIST数据集的一个子集,包含60000张图片作为训练数据,10000张作为测试数据,其中每张图片代表0~9中的一个数字,图片大小为28*28(可以用一个28* ...
- 网络运维必回的模拟器-GNS软件下载和安装
网络运维必回的模拟器-GNS软件下载和安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.GNS简介 1>.什么是GNS GNS3是一款具有图形化界面可以运行在多平台( ...
- Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小
Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般在内网环境中,我们几乎是用不到IPV6,因此我们没有必要把多不 ...
- 简单的jvm优化的尝试
一.eclipse 启动优化 在日常的开发中发现eclipse 启动的时候非常慢,并且在实际的开发中也非常卡,所以尝试着优化一下.现在eclipse 是运行在jdk1.7上. 首先我们可以看到ecli ...
- 【JQ】jq动态绑定事件.on()、解绑事件off()
#JQ 绑定与解绑事件的方法的历史演变 1. jquery1.4 及之前的版本,由.click() 或 .bind()方法绑定的事件,不能适用脚本创建的新元素:即是说页面加载完成后,再动态创建的DOM ...
- Kafka技术内幕 读书笔记之(二) 生产者——服务端网络连接
KafkaServer是Kafka服务端的主类, KafkaServer中和网络层有关的服务组件包括 SocketServer.KafkaApis 和 KafkaRequestHandlerPool后 ...
- 【1】【leetcode-130】 被围绕的区域
(DFS思路对,写复杂了) 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充. 示例: X X X X X O ...