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; 由于今天的主要内容是表的操作,建立表的详细过程不是本 ...
随机推荐
- django补充
通过表名获取app的name models.UserInfo._meta.app_label >>> from repository import models >>&g ...
- stock1114
# encoding: utf-8 import requests import logging import logging.config import random import os impor ...
- JavaSE_List&Array_Java1.7
这里简单写了下List和Array的相互转换 package cn.rocker.collection.list; import org.junit.Test; import java.util.Ar ...
- Shell中变量扩展操作
假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir ...
- Hadoop记录-技术网站
Grafan监控:http://docs.grafana.org/ Tez:http://tez.apache.org/install.html 阿里巴巴镜像:https://opsx.alibaba ...
- jQuery使用(八):运动方法
show().hide().toggle() 参数:null或(duration,easing,callblack) fadeIn().fadeout().fadeToggle().fadeTo() ...
- [Android] Android Butterknife 8.8.1 在 Activity 和 Fragment 、 Adapter 中的使用
ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤.是大神JakeW ...
- 【小玩意】time-passing-by clock
就着youtube上的教程用html和js做了个小时钟. Code: clock.html //clock.html <!DOCTYPE html> <html> <he ...
- Spring 快速开始 启动Spring
[启动Spring必须配置] [web.xml部署描述符方式] 1.配置Servlet级别上下文 <servlet> <servlet-name>springDispatche ...
- mybatis-servlet.xml配置SpringMVC样板
<?xml version="1.0" encoding="UTF-8" ?><beans xmlns:xsi="http://ww ...