简单来说,transaction就是用来恢复为以前的数据。

举个例子,我想把今天输入到数据库里的数据在晚上的时候全部删除,那么我们就可以在今天早上的时候开始transaction事物,令autocommit关闭并且执行commit,然后再开始输入数据,到晚上的时候,可以执行rollback恢复到今天没输入数据的状态,也就是恢复到commit前的数据。

[root@localhost ~]# mysql -uroot -p              #登录数据库
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.52-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec) MariaDB [(none)]> create database bp #我自己创建一个数据库用来做这个实验
-> ;
Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> MariaDB [(none)]> use bp;
Database changed
MariaDB [bp]> create table test(id int,name varchar(20)); #建表
Query OK, 0 rows affected (0.08 sec) MariaDB [bp]> insert into test values(1,'123');
Query OK, 1 row affected (0.06 sec) MariaDB [bp]> insert into test values(2,'323');
Query OK, 1 row affected (0.01 sec) MariaDB [bp]> select * from test;
+------+------+
| id | name |
+------+------+
| 1 | 123 |
| 2 | 323 |
+------+------+
2 rows in set (0.00 sec) MariaDB [bp]> show variables like '%commit%'; #查看autocommit是否关闭,可以看到现在开启着
+-------------------------------------------+-------+
| Variable_name | Value |
+-------------------------------------------+-------+
| aria_group_commit | none |
| aria_group_commit_interval | 0 |
| autocommit | ON |
| innodb_commit_concurrency | 0 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_use_global_flush_log_at_trx_commit | ON |
+-------------------------------------------+-------+
6 rows in set (0.00 sec) MariaDB [bp]> set autocommit=0; #关闭autocommit
Query OK, 0 rows affected (0.00 sec) MariaDB [bp]> show variables like '%commit%';
+-------------------------------------------+-------+
| Variable_name | Value |
+-------------------------------------------+-------+
| aria_group_commit | none |
| aria_group_commit_interval | 0 |
| autocommit | OFF |
| innodb_commit_concurrency | 0 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_use_global_flush_log_at_trx_commit | ON |
+-------------------------------------------+-------+
6 rows in set (0.00 sec) MariaDB [bp]> start transaction; #开始事物
Query OK, 0 rows affected (0.00 sec) MariaDB [bp]> delete from test where id=1;
Query OK, 1 row affected (0.00 sec) MariaDB [bp]> select * from test;
+------+------+
| id | name |
+------+------+
| 2 | 323 |
+------+------+
1 row in set (0.00 sec) MariaDB [bp]> commit; #记录前面的数据
Query OK, 0 rows affected (0.01 sec) MariaDB [bp]> delete from test where id=2; #删除数据
Query OK, 1 row affected (0.00 sec) MariaDB [bp]> select * from test;
Empty set (0.00 sec) MariaDB [bp]> rollback; #回滚到commit记录的数据
Query OK, 0 rows affected (0.00 sec) MariaDB [bp]> select * from test; #回滚成功
+------+------+
| id | name |
+------+------+
| 2 | 323 |
+------+------+
1 row in set (0.00 sec) MariaDB [bp]>

mysql之commit,transaction事物控制的更多相关文章

  1. MySQL事物控制

    有时候我们需要保证事物的各个步骤都执行成功的前提下才能让每一步骤的事物执行,此时就需要事物控制. 事物控制用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败 ...

  2. MySQL存储过程 事务transaction

    MySQL 中,单个 Store Procedure(SP) 不是原子操作,而 Oracle 则是原子的.如下的存储过程,即使语句2 失败,语句 1 仍然会被 commit 到数据库中: create ...

  3. SQL SERVER TRANSACTION 事物

    1.事务的概念 事物是一种机制,是一种操作序列,它包含了数据库一组操作命令,这组命令要么全部执行,要么都不执行.因此事物是一组不可分割的事物逻辑单元,在数据库进行并发操作时候,事物是作为最小的控制单元 ...

  4. TODOList 多线程交互、RCP、事物控制、数据倾斜、HBase数据同步性

    TODOList 多线程交互.RCP.事物控制.数据倾斜.HBase数据同步性 TODO List thread.join()如何互相之间通知? 线程池何时最后运行完成? MemCache性能要优于R ...

  5. 大数据学习day35----flume01-------1 agent(关于agent的一些问题),2 event,3 有关agent和event的一些问题,4 transaction(事务控制机制),5 flume安装 6.Flume入门案例

    具体见文档,以下只是简单笔记(内容不全) 1.agent Flume中最核心的角色是agent,flume采集系统就是由一个个agent连接起来所形成的一个或简单或复杂的数据传输通道.对于每一个Age ...

  6. 知识点:Mysql 基本用法之流程控制

    流程控制 一. 条件语句 if 语句实例: delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = ...

  7. [MySQL] Group Commit理解

    简单的方法理解MySQL Group Commit原理 一个摆渡将乘客从A点传输到B点 MySQL 5.0 行为 在MySQL 5.0中,摆渡会在A点按顺序搭载乘客,并且传送到B点.A点和B点的来回行 ...

  8. 单独使用ibatis做事物控制。

    当项目中,只使用到了ibatis而没有使用spring来作为事物控制的时候,可以这样写: try { Reader reader = Resources.getResourceAsReader(&qu ...

  9. mysql事务,START TRANSACTION, COMMIT和ROLLBACK,SET AUTOCOMMIT语法

    http://yulei568.blog.163.com/blog/static/135886720071012444422/ MyISAM不支持 START TRANSACTION | BEGIN ...

随机推荐

  1. maven scope和项目发布需要注意的地方

    Maven Scope的使用: http://www.cnblogs.com/wangyonghao/p/5976055.html servlet-api和jsp-api等jar包,一般由servle ...

  2. 堆排序,图解,C/C++实现

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  3. sea.js与require.js的区别

    随着ES6标准的module出台渐渐会退出历史舞台 首先原理上的区别 sea.js遵循CMD规范.书写方式类似node.js的书写模板代码.依赖的自动加载,配置的简洁清晰.说白了就是懒加载. requ ...

  4. nw.js的localStorage的物理储存位置

    前言 因为在做美团外卖商家端的nw.js壳子项目,需要保证在壳子里面使用localStorage的数据可以持久化保存. 发现nw可以保存,即使删除应用重写打包也可以保存,所以解决了这个需求,但是还是需 ...

  5. Docker(2):快速入门及常用命令

    什么是Docker? Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行和管理 ...

  6. 转--HC05-两个蓝牙模块间的通信

    示例蓝牙: 蓝牙A地址:3014:10:271614 蓝牙B地址:2015:2:120758 //============================================= 步骤: 1 ...

  7. shell脚本实例-shell 分析系统瓶颈脚本

    #!/usr/bin/bash PS3="Your choice is: [10 for quit]" #检查是那个系统 os_check() { if [ -e /etc/red ...

  8. finfo_file

      本文实例讲述了PHP使用finfo_file()函数检测上传图片类型的实现方法.分享给大家供大家参考,具体如下: 在输入输出中,文件的交互必不可少,比如文件的上传什么的.这里我们来解决一个小问题, ...

  9. scrollIntoView()方法

    该方法用于建立一个锚点,点击锚点,会跳到相应的内容,且该内容头部与浏览器头部平齐 实例: <html> <head> <title>TODO supply a ti ...

  10. builtroot 添加git 下载方式

    1.buildroot/Config.in 配置default git server eg:config xxxx_GIT_SITE string "git site" defau ...