事务控制语言(DTL)

mysql数据事务控制语言DTL(Data Transaction Language) 。

什么是事务

通常,一条语句使用一个分号(;)来结束,并得到执行。这个“一次性执行”的过程,可以称为“一个事务”。

简单来说,“一条sql语句,就是一个事务”。

则数据库(包括mysql数据库)中的事务,是指可以将“多条语句”的执行,当作“一条语句”来看的一种内部机制。

即“事务”是一种可以保证“多条语句一次性执行完成”或“一条都不执行”的机制。

将一系列的sql语句当作“一句”来执行的一种机制——该系列语句要么全部执行成功,要么一个都不执行。

为什么需要事务

实际应用中,经验中的一个“操作”,其实常常对应着数据库(表)的2个或2个以上的操作,此时就应该让此2个操作具有“整体性”。

比如网银汇款,其实是将一个储户中的钱减少一个数目,再将另一个储户的钱增加一个数目。

如果只做完了前者,后者因为某种原因没有做完就出错了。

id 账户名 存款
1 test1 1000
2 test2 5000
3 test3 3000

例如现在,test1向test2银行转账4000:

第一步: update cunkuan set 存款=存款-4000 where id=1;

第一步做完,突然断电了!第二步没有来得及做。

第二步: update cunkuan set 存款=存款+4000 where id=2;

如果没有事务,就可能发生这种事情。如果有了事务,则就可以避免该事情。

事务可以看作是一个“容器”,将多条语句,放入该容器,最后,只要一个命令行,来决定其中的所有语句是否“执行”。

事务的特点

原子性

一个事务中的所有语句,应该做到:要么全做,要么一个都不做;

一致性

让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;

隔离性

如果多个事务同时并发执行,但每个事务就像各自独立执行一样。

持久性

一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。

事务模式

事务模式:就是让每条执行语句是否当作“一个事务”来看的设定项。

mysql默认安装好之后,其事务模式是:一条语句(以语句结束符作为标志)就当作一个事务来执行。

查看模式:

show variables like '%autocommit%';

将autocommit设置为0就关闭了该模式,则所有语句都必须使用commit之后才正式生效:

set autocommit = 0;

比如:

原来数据:

执行插入:

结果:

现在将其修改为:事务需要“认可”模式:

set  autocommit = 0;# false,关闭该模式,即此时不再是一条语句一个事务了。
# 结果是:必须使用commit语句才能够生效。

然后插入:

刷新:
可见,没有变化。

然后再执行commit:

再刷新:

注意:autocommit的设置值,只是影响通常情况下每条语句的默认行为(自动提交还是等着commit提交)。

不管autocommit的值是什么(1,0),仍然可以使用事务的完整流程模式来实现事务。

事务的基本实现流程

事务的执行基本流程:

  1. 开始事务,声明事务开始:

    start transaction;
    # 或:
    begin;
    
  2. 设定多条要执行的具体的sql语句1,语句2,比如:insert, update, delete, select等,其实就是执行,只是这些执行的语句,并不“生效”——其只是内存状态下的执行,而不是物理状态的执行。

  3. 判断上述语句是否发生错误(cmd中直接观察是否出错,php程序中通过语句的返回结果是否为false或者使用 mysql_error()函数判断是否有错)

    是否需要执行该些语句:

    if(判断是否有错误){// 执行——才针对执行了物理性改变——即生效。// 如果没有错误,执行commit语句commit;}
    else {// 回滚——不执行任何语句。// 否则执行rollback语句rollback;
    }
    

下面来使用事务完整实现转账这件事情(假设为cmd模式):

start  transaction;# 第一步:
update  cunkuan  set 存款=存款-4000  where id=1;# 第一步做完,突然断电了?# 第二步:
update  cunkuan  set 存款=存款+4000  where id=2;# 则如果这两条语句都没有错误,就可以:
commit;# 如果其中发生了错误,则可以:
rollback;

示例:

15-mysql数据事务语言DTL相关推荐

  1. MySQL数据操作语言——插入语句、修改语句和删除语句

    数据操作语言 (DML:Data Manipulate Language )包括: 插入:insert 修改:update 删除:delete 一.插入语句 方式一:(经典插入) 1. 语法:     ...

  2. mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)

    0x01 创建数据库并指定字符集和排序规则 -- 三种实例写法 create database temptab2 character set utf8 collate utf8_general_ci; ...

  3. sql 两大类 DDL数据定义语言 和DCL数据控制语言

    SQL分为五大类: DDL:数据定义语言   DCL:数据控制语言     DML:数据的操纵语言  DTL:数据事务语言  DQL:数据查询语言. DDL (date definition lang ...

  4. mysql在什么情况下会变成全局查询_Linux下MYSQL数据语言,全局变量,查询

    一.MYQL数据语言 1.数据库语言 SQL语言包括四类种主要程序设计语言类别的语句: 数据定义语言(DDL),例如:CREATE.DROP.ALTER等语句. 数据操作语言(DML),例如:INSE ...

  5. MySQL基础篇:数据定义语言DDL

    文章目录 1.介绍 2.操作数据库Database 创建数据库 查看有哪些数据库 删除数据库 选择数据库 查看当前正在使用哪个数据库 3.表结构的操作 查看当前数据库的所有表 创建表结构 查看表结构 ...

  6. mysql DDL数据定义语言

    DDL数据定义语言 本节涉及MySQL关键字:create.alter(rename,add,chang,modify,drop).drop.delete.truncate等. -- 创建表: -- ...

  7. C语言之连接Mysql数据篇

    C语言之连接Mysql数据篇 效果图 难度 : ⭐⭐⭐⭐(全星5颗星的情况下) https://downloads.mysql.com/archives/c-c/ 先去那个网站下载个文件 7MB左右 ...

  8. mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)

    SQL 包含以下 4部分:1数据定义语言(DDL):DROP.CREATE.ALTER 等语句.2数据操作语言(DML):INSERT(插入).UPDATE(修改).DELETE(删除)语句.3数据查 ...

  9. c 连接mysql错误信息_使用C语言访问MySQL数据 —— 连接和错误处理

    2011-05-09 wcdj 可以通过许多不同的编程语言来访问MySQL,例如,C,C++,Java,Perl,Python,Tcl,PHP等.本文主要总结使用C语言接口如何访问MySQL数据. ( ...

  10. MySQL基础——DML语言学习\插入数据\删除数据\更新数据

    接上篇文章 MySQL基础--DDL语言学习 DML语言学习 Data Manipulation Language 数据操纵语言 主要包括表记录的插入(INSERT).更新(UPDATE).删除(DE ...

最新文章

  1. 华为10GE LAN板与Wan板区别
  2. 程序员创业,不要把风险带给家人!——Leo网上答疑(4).
  3. HDU4392(反素数强大的模版)
  4. 区块链的那些事,你知道和不知道的都在这里!
  5. 《死亡笔记》等书遭禁 北京全市封杀“鬼故事”
  6. java登录界面命令_Java命令行界面(第5部分):JewelCli
  7. python书写风格_以下两种风格 Python 写法,请问大家倾向哪种:)
  8. 数据结构与算法分析(五)——常用排序
  9. apache的日志切割
  10. linux反向连接如何免密码,编写受密码保护的反向Shell(Linux x64)
  11. Spring常见面试题总结(超详细回答)
  12. 在hb中html怎么插图片,WKWebView加载HTML文本(图片自适应)
  13. Go语言核心之美 3.2-slice切片
  14. 怎样拿下SUN公司的SCJP认证?
  15. JAVA计算机毕业设计物料追溯系统(附源码、数据库)
  16. 01背包的朴素解法及优化(C语言)
  17. generator详解
  18. 关于HTML中表格单元格的合并
  19. 完美世界游戏客户端程序面试
  20. 总结一波腾讯,阿里,字节跳动问的 Redis 面试题,收藏起来。

热门文章

  1. Seafile私有云盘搭建详解
  2. 利用8421码进行进制之间的转换
  3. js去掉前后空格的函数_Node.js十年,你大爷还是你大爷
  4. OPC与三菱Q系列PLC通信
  5. html文件做屏保win10,给Win10系统设置一个漂亮屏保的三种方法(图文)
  6. 互联网思维——平台思维
  7. Android jetpack Room数据库(一)基本使用
  8. 浅夏,绿色延伸,就连邻家墙角的蔷薇也羞红了脸
  9. 十代服务器芯片组,Intel自曝400、495系列芯片组:搭档十代酷睿
  10. class6--HTTP头注入及参数类型注入