MySql——事务控制语言(DTL)
什么是事务(控制台只能是内存的操作)
通常,在此之前,我们说,一条语句使用一个分号(;)来结束,并得到执行。
那么我们说,这个“一次性执行”的过程,可以称为“一个事务”。
简单来说,“一条sql语句,就是一个事务”。
则:
数据库(自然包括mysql数据库)中的事务,是指,可以将“多条语句”的执行,当作“一条语句”来看到的一种内部机制。
即:“事务”是一种可以保证“多条语句一次性执行完成”或“一条都不执行”的机制。
为什么需要事务?
看一个实际应用需求(银行存款):表名cunkuan
id |
账户名 |
存款 |
1 |
test1 |
1000 |
2 |
test2 |
5000 |
3 |
test3 |
3000 |
现在,test1突然需要一笔钱,买iPhone8,向test2借钱4000。
银行转账:
第一步: update cunkuan set 存款=存款-4000 where id=2;
第一步做完,突然断电了!
第二步: update cunkuan set 存款=存款+4000 where id=1;
则如果没有事务,就可能发生这种事情(惨案)。
如果有了事务,则就可以避免该事情。
事务可以看作是一个“容器”,将多条语句,放入该容器,最后,只要一个命令行,来决定其中的所有语句是否“执行”。
事务的特点
原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;
一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;
隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样。
持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。
事务模式:
事务模式:就是让每条执行语句是否当作“一个事务”来看到的设定项。
mysql默认安装好之后,其事务模式是:一条语句当作一个事务。
比如:
原来数据:
执行插入:
结果:
我们可以将其修改为:事务需要“认可”模式:
set autocommit = 0; //false,关闭该模式,即此时不再是一条语句一个事务了。
//结果是:必须使用commit语句才能够生效。
然后插入:
s刷新:
可见,没有变化。
然后再执行commit:
再刷新;
注意:autocommit的设置值,只是影响通常情况下都每条语句的默认行为(自动提交还是等着commit提交)
不管autocommit的值是什么(1,0),我们也仍然可以使用事务的完整流程模式来实现事务,如下:
事务的基本实现流程:
1,声明事务开始:start transaction;
2, 设定多条要执行的具体语句,比如:insert, update, delete, select。。。其实就是执行,只是这些执行的语句,并不“生效”——其只是内存状态下的执行,而不是物理状态的执行。
3,判断是否需要执行该些语句:
if( 判断是否有错误){
//执行——才针对执行了物理性改变——即生效。
commit;
}
eslse{
//回滚——不执行任何语句。
rollback;
}
判断是否有错误通常分这两种环境:
1,如果是cmd中,直接观察是否出错。
2,如果是php程序中,那就需要使用 mysql_error()函数来判断是否有错。
下来来使用事务完整转账这件事情(假设为cmd模式):
start transaction;
#第一步:
update cunkuan set 存款=存款-4000 where id=2;
#第一步做完,突然断电了?
#第二步:
update cunkuan set 存款=存款+4000 where id=1;
则如果这两条语句都没有错误,就可以:
commit;
但,如果其中发生了错误,则可以:
rollback;
MySql——事务控制语言(DTL)的更多相关文章
- mysql事务控制语言TCL
Transaction Control Language 事务控制语言 事务:一个或一组sql语句组成一个执行单元,这个执行单元作为不可分割的整体执行.如果某个语句执行错误,整个单元回滚到最初的状态. ...
- 事务控制语言DTL
一.什么是事务? · 数据库中的事务,是指可以将“多条相关语句执行”看做是“一条语句执行”的一种内部机制.即事务是一种可以保证“多条语句一次性执行完成”或者一条语句都不执行的机制. 三.事务的特点 原 ...
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引
一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...
- <MySQL>入门四 事务控制语言 TCL
-- TCL /* Transcation Control Language 事务控制语言 事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行 案例:转账 name ...
- MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)
五.数据查询语言(DQL) (重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...
- mysql 事物控制语言
事务控制语言(DTL) 什么是事务 通常,在此之前,我们说,一条语句使用一个分号(;)来结束,并得到执行. 那么我们说,这个“一次性执行”的过程,可以称为“一个事务” ...
- MySQL事务提交过程(一)
MySQL作为一种关系型数据库,已被广泛应用到互联网中的诸多项目中.今天我们来讨论下事务的提交过程. MySQL体系结构 由于mysql插件式存储架构,导致开启binlog后,事务提交实质是二阶段提交 ...
- MySQL入门详解(二)---mysql事务、锁、以及优化
MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在一个商城系统中,用户执行购买操作,那么用户订单中应该加一条,库存要减一条,如果这两步由于意外只进行了其中一步那么就会发生很大的问题.而事 ...
- MySQL事务提交过程
一.MySQL事务提交过程(一) MySQL作为一种关系型数据库,已被广泛应用到互联网中的诸多项目中.今天我们来讨论下事务的提交过程. 由于mysql插件式存储架构,导致开启binlog后,事务提交实 ...
随机推荐
- Unity3D内存优化案例讲解
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- [置顶]
【机器学习PAI实践八】用机器学习算法评估学生考试成绩
(本文数据为实验用例) 一.背景 母亲是老师反而会对孩子的学习成绩造成不利影响?能上网的家庭,孩子通常能取得较好的成绩?影响孩子成绩的最大因素居然是母亲的学历?本文通过机器挖掘算法和中学真实的学生数据 ...
- UDP:rfc768/广播和多播/IGMP
封装情况:
- wampserver2.5的php.ini位置在wamp\bin\apache\apache2.4.9\bin
wampserver2.5的php.ini位置在wamp\bin\apache\apache2.4.9\bin php.ini有多个地方,C:\wamp\bin\php\php5.5.12下面有php ...
- bzoj 4811 由乃的OJ
bzoj 4811 由乃的OJ 考虑树链剖分. 树剖后用一颗线段树维护一段连续区间,类似于一个函数,各位上进入 \(0/1\) ,输出的数字分别是什么.注意到最多只有 \(64\) 位,可以用一个 \ ...
- 20179223《Linux内核原理与分析》第九周学习笔记
视频学习 进程调度与进程调度的时机分析 不同类型的进程有不同的调度需求 第一种分类: --I/O-bound:1.频繁的进行I/O:2.通常会花费很多时间等待I/O操作的完成 --CPU-bound: ...
- asp.net core microservices 架构之 分布式自动计算(一)
一:简介 自动计算都是常驻内存的,没有人机交互.我们经常用到的就是console job和sql job了.sqljob有自己的宿主,与数据库产品有很关联,暂时不提.console job使 ...
- java基本类型和封装类型区别及应用
1.基本类型只能按值传递,而每个基本类型对应的封装类是按引用传递的. 2.从性能上说java中的基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建的,(对象的引用在堆栈上创建).比如 Integ ...
- rem自适应原理
rem自适应原理 rem是根据html的font-size大小来变化,正是基于这个出发,我们可以在每一个设备下根据设备的宽度设置对应的html字号,从而实现了自适应布局.更多介绍请看这篇文章:rem是 ...
- 在Eclipse中导入dtd和xsd文件,使XML自动提示
DTD 类型约束文件 1. Window->Preferences->XML->XML Catalog->User Specified Entries窗口中,选择Add ...