mysql 事务解析

事务(transaction)

事务是业务逻辑的一个基本的单元组成。

每一个事务由一条条sql语句组成。

和事务相关的语句(insert,delete,update)这些DML语句

事务的存在保证了数据的安全性。

事务机制:

每一次执行DML语句都会记录操作,但不会修改数据,等到所有DML执行,

最后提交事务(删除记录,修改硬盘数据)或者回滚事务(删除记录,不修改数据)。

事务由四大特性:ACID

  • A:原子性,事务是最小的工作单元
  • C:一致性,事务中的DML语句要么都执行成功,要么都失败
  • I:隔离性,事务与事务之间隔离。
  • D:持久性,最后数据持久化到硬盘,才会结束

事务的隔离级别:

1.读未提交(read uncommitted),表示一个事务可以读取到另一个事务没有提交的数据

这种级别存在脏读现象

2.读以提交(read committed),可以读取到已经提交的数据

这种级别解决了脏读现象,但是不可以重复读

3.可重复读(repeatable read),事务读取的数据,与其他事务提交数据无关,可以重复读取,事务开始的数据。

解决了不可重复读现象,但是存在幻读,读取到的数据不真实。

4.序列化读/串行化读。解决了所有问题,和多线程里面的线程安全相似。但是存在效率低下。因为事务需要排队。

mysql数据库默认的隔离级别是第三级别。可重复读。

mysql事务默认自动提交。执行一条DML直接修改硬盘上的数据。

想要手动提交事务。在执行DML之前。先start transaction;然后执行DML,最后提交或者回滚。

演示手动回滚事务:

drop table if exists t_user1;

create table t_user1(

id int(3) primary key auto_increment,

username varchar(10)

);

mysql> create table t_user1(

-> id int(3) primary key auto_increment,

-> username varchar(10)

-> );

Query OK, 0 rows affected (0.02 sec)

mysql> insert into t_user1(username) values('h1');

Query OK, 1 row affected (0.01 sec)

mysql> select * from t_user1;

+----+----------+

| id | username |

+----+----------+

| 1 | h1 |

+----+----------+

1 row in set (0.00 sec)

mysql> rollback;//回滚事务

Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_user1;//回滚之后还是和之前一样,因为myql自动提交了

+----+----------+

| id | username |

+----+----------+

| 1 | h1 |

+----+----------+

1 row in set (0.00 sec)

mysql> start transaction;//手动开启事务,关闭事务自动提交

Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_user1(username) values('h2');

Query OK, 1 row affected (0.01 sec)

mysql> insert into t_user1(username) values('h3');

Query OK, 1 row affected (0.00 sec)

mysql> insert into t_user1(username) values('h4');

Query OK, 1 row affected (0.00 sec)

mysql> select * from t_user1;

+----+----------+

| id | username |

+----+----------+

| 1 | h1 |

| 2 | h2 |

| 3 | h3 |

| 4 | h4 |

+----+----------+

4 rows in set (0.00 sec)

mysql> rollback;//回滚

Query OK, 0 rows affected (0.01 sec)

mysql> select * from t_user1;

+----+----------+

| id | username | 最后硬盘上的数据还是和之前一样。

+----+----------+ 回滚删除记录,不修改硬盘上的数据。

| 1 | h1 |

+----+----------+

1 row in set (0.00 sec)

到此这篇关于mysql 事务解析的文章就介绍到这了,更多相关mysql 事务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一文搞懂MySQL XA如何实现分布式事务

    目录 前言 XA 协议 如何通过MySQL XA实现分布式事务 前言 MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如何实现分布式事务的呢?比如开发一个业务系统,它接受外部的请求,然后访问多个内部其它系统才能执行该请求.执行时我们需要同时更新多个数据库的值(D1,D2,D3).由于系统必须处于一个一致性,也就是这三个数据库的值要么同时更新成功,要么全部不更新.不然会造成子系统有些指令成功了,有些指令尚未执行.导致对结果理解混乱. 那么,MySQL如何实

  • MySQL数据库事务transaction示例讲解教程

    目录 1.什么是事务? 2.和事务相关的语句只有这3个DML语句:insert.delete.update 3.假设所有的业务都能使用1条DML语句搞定,还需要事务机制吗? 4.事务的原理 5.事务的四大特性:ACID 6.关于事务之间的隔离性 1)第一级别:读未提交(read uncommitted) 2)第二级别:读已提交(read committed) 3)第三级别:可重复读(repeatable read) 4)第四级别:序列化读/串行化读(serializable) 7.演示事务的隔离

  • mysql事务隔离级别详情

    serializable 串行化(无问题) 事务必须以顺序的方式执行,前一个事务提交之前后面的事务无法进行提交,最安全,但是不能并发操作,导致效率低下. repeatab read 可重复读(默认隔离级别)(幻读) 在一个事务未提交之前,里面不论执行多少次查询,查询的结果都一样(即使这条记录被别的事务修改过)但是可能会出现幻读 read committed 读已提交(不可重复度,幻读) 在当前事务中别的事务提交的数据可以看到,那么可能会导致不可重复读(另一个线程提交数据后当前线程可以看到,然后就

  • 关于MySQL与Golan分布式事务经典的七种解决方案

    目录 1.基础理论 1.1 事务 1.2 分布式事务 2.分布式事务的解决方案 2.1 两阶段提交/XA 2.2 SAGA 2.3 TCC 2.4 本地消息表 2.5 事务消息 2.6 最大努力通知 2.7 AT事务模式 3.异常处理 3.1 异常情况 3.2 子事务屏障 3.3 子事务屏障原理 3.4 子事务屏障小结 4.分布式事务实践 4.1 一个SAGA事务 4.2 处理网络异常 4.3 处理回滚 5.总结 前言: 随着业务的快速发展.业务复杂度越来越高,几乎每个公司的系统都会从单体走向分

  • MySQL数据库的事务和索引详解

    目录 一.事务: 事务四大特性: 并发事务带来哪些问题?(隔离所导致的一些问题) 事务隔离级别有哪些? MySQL的默认隔离级别: 二.索引: 索引的作用: 索引的分类: 索引准则: 索引的数据结构: 总结 一.事务: 事务是逻辑上的一组操作,要么都成功,要么都失败! ---------------------------------- 1.SQL执行        A:1000元     -->转账200元        B:200元 2.SQL执行        A:800元       -

  • node连接mysql查询事务处理的实现

    目录 进入正题 mysql 增删改查 mysql 事务处理 自己用 mysql 很多次的,然后又是主玩nodejs的.专门写一篇文章来说说nodejs连接mysql数据库.在使用之前,请检查计算机是否具有一下环境! nodejs 执行环境. mysql数据库环境(下载地址). navicat 连接 mysql 数据库的图形化操作软件.(非必要) 进入正题 mysql 增删改查 首先,我们去下载一个叫mysql的依赖包,这个包就是通过 nodejs 代码去连接数据库,从而操作数据库. 创建一个文件

  • mysql事务对效率的影响分析总结

    1.数据库事务会降低数据库的性能.为了保证数据的一致性和隔离性,事务需要锁定事务. 2.如果其他事务需要操作这部分数据,必须等待最后一个事务结束(提交,回滚). 实例 create table acct( acct_no varchar(32), acct_name varchar(32), balance decimal(16,2) ); insert into acct values ('0001','Jerry', 1000), ('0002','Tom', 2000); start tr

  • mysql 事务解析

    事务(transaction) 事务是业务逻辑的一个基本的单元组成. 每一个事务由一条条sql语句组成. 和事务相关的语句(insert,delete,update)这些DML语句 事务的存在保证了数据的安全性. 事务机制: 每一次执行DML语句都会记录操作,但不会修改数据,等到所有DML执行, 最后提交事务(删除记录,修改硬盘数据)或者回滚事务(删除记录,不修改数据). 事务由四大特性:ACID A:原子性,事务是最小的工作单元 C:一致性,事务中的DML语句要么都执行成功,要么都失败 I:隔

  • 深入解析MySQL 事务

    目录 事务的四大特性 ( ACID ) 脏读 不可重复读 幻读 MySQL的隔离级别 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败. 事务的四大特性 ( ACID ) 原子性(Atomicity):一个事物是一个不可分割的单位,要么全都执行,要么都不执行: 一致性(Consistency):事务执行前后,数据处于合法的状态: 持久性(Isolation):事务执行完后,数据的修改是持久的,不会因为其他操作或故障而对其产生影响: 隔离性(Durability):多个事

  • 深入解析MySQL 事务

    目录 事务的四大特性 ( ACID ) 脏读 不可重复读 幻读 MySQL的隔离级别 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败. 事务的四大特性 ( ACID ) 原子性(Atomicity):一个事物是一个不可分割的单位,要么全都执行,要么都不执行: 一致性(Consistency):事务执行前后,数据处于合法的状态: 持久性(Isolation):事务执行完后,数据的修改是持久的,不会因为其他操作或故障而对其产生影响: 隔离性(Durability):多个事

  • MySQL事务日志(redo log和undo log)的详细分析

    目录 前言 1.redo log 1.1 redo log和二进制日志的区别 1.2 redo log的基本概念 1.3 日志块(log block) 1.4 log group和redo log file 1.5 redo log的格式 1.6 日志刷盘的规则 1.7 数据页刷盘的规则及checkpoint 1.8 LSN超详细分析 1.9 innodb的恢复行为 1.10 和redo log有关的几个变量 2.undo log 2.1 基本概念 2.2 undo log的存储方式 2.3 和

  • 基于mysql事务、视图、存储过程、触发器的应用分析

    一 ,mysql事务 MYSQL中只有INNODB类型的数据表才能支持事务处理. 启动事务有两种方法 (1) 用begin,rollback,commit来实现 复制代码 代码如下: begin 开始一个事务rollback   事务回滚commit    事务确认 (2)直接用set来改变mysql的自动提交模式 复制代码 代码如下: set autocommit=0 禁止自动提交set autocommit=1 开启自动提交 demo 复制代码 代码如下: header("Content-t

  • Mysql事务操作失败如何解决

    Mysql事务操作失败如何解决 事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 . 要实现事务的原子性,单单靠一条commit或是rollback命令还是不行的,因为例如commit命令它只是将一个事务中执行成功的DML语句提交给数据库里.如果要实现事务的原子性,则就需要commit和rollback命令配合上程序上的一个业务逻辑才能可以,具体业务逻辑代码如下示例代码: 1.现象 程序中打开了事务进行插入,但是没有commit,表中的数据已经存在,就是回滚也不

  • PHP操作MySQL事务实例

    本文实例讲述了PHP操作MySQL事务的方法,分享给大家供大家参考.具体方法如下: 一般来说,事务都应该具备ACID特征.所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写,下面以"银行转帐"为例来分别说明一下它们的含义: ① 原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分.换句话说,事务是不可分割的最小单元.比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个

  • PHP mysql事务问题实例分析

    本文实例分析了PHP的mysql事务问题.分享给大家供大家参考,具体如下: 对于myisam数据库,可以控制事务的进行: $mysqlrl = mysql_connect ( $db_config ["host"], $db_config ["user"], $db_config ["pass"], true ); if (! $mysqlrl) { $msg = mysql_error (); die ( 'Could not connect:

  • MySQL事务的基础学习以及心得分享

    事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务,下面就是关于MySQL事务学习中的心得分享: 事务的特性 1.原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 2.一致性(Consistency):在一个事务中,事务前后数据的完整性必须保持一致,可以想象银行转账.火车购票. 3.隔离性(Isolation):多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的事务不能被其它用户的事

  • MYSQL事务教程之Yii2.0商户提现功能

    前言 我是一个半路出家的PHP程序员,到目前为止,不算在培训班学习的时间,已经写代码整整两年了.可能由于工作业务的原因,在这两年中我没有用到过MySQL事务.就在昨天有个关于支付宝转账的业务不得不使用MySQL事务来完成,别人说了很多,还是不明白MySQL事务到底是个啥,于是就开始了新一轮的补课,出来混,欠下的知识账总是要还的. 先简单说一下我昨天遇到的那个业务,我要在移动端发起一个支付宝提现的业务,这个业务我之前是分三步写的: 第一步: 首先提现的话,我先要在提现表里写入一条提现记录,再更新一

随机推荐