mysql-事务

1.事务(transaction)
事务是业务逻辑的基本单元。

[En]

A transaction is a basic unit of business logic.

每一个事务由一条条sql语句组成。
和事务相关的语句(insert,delete,update)这些DML语句
交易的存在保证了数据的安全。

[En]

The existence of transactions ensures the security of the data.

事务机制:
每一次执行DML语句都会记录操作,但不会修改数据,等到所有DML执行,
最后提交事务(删除记录,修改硬盘数据)或者回滚事务(删除记录,不修改数据)。
事务由四大特性:ACID
A:原子性,事务是最小的工作单元
C:一致性,事务中的DML语句要么都执行成功,要么都失败
I:隔离性,事务与事务之间隔离。
D:持久性,最后数据持久化到硬盘,才会结束

事务的隔离级别:
1.读未提交(read uncommitted),表示一个事务可以读取到另一个事务没有提交的数据
这种级别存在脏读现象
2.读以提交(read committed),可以读取到已经提交的数据
这个级别解决了读脏的现象,但不能重复读。

[En]

This level solves the phenomenon of dirty reading, but it can not be read repeatedly.

3.可重复读(repeatable read),事务读取的数据,与其他事务提交数据无关,可以重复读取,事务开始的数据。
解决了不可重复读取的现象,但存在错觉,读取的数据不真实。

[En]

The phenomenon of non-repeatable reading is solved, but there is illusion, and the data read is not true.

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>

Original: https://www.cnblogs.com/journeyhch/p/15570589.html
Author: journeyhch
Title: mysql-事务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508030/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 设计模式之(9)——适配器模式

    定义:适配器模式是将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作,在软件设计中我们需要将一些”现存的对象&#8…

    数据库 2023年6月14日
    041
  • MYSQL–>索引

    概述 索引是帮助MYSQL 高效获取数据的 有序数据结构 数据库维护着满足特定查找算法的数据结构,这种数据结构以某种方式指向数据。 这样就可以在数据结构上实现高级查找方法,这种数据…

    数据库 2023年6月14日
    077
  • Pisa-Proxy SQL 解析之 Lex & Yacc

    一、前言 1.1 作者介绍 王波,SphereEx MeshLab 研发工程师,目前专注于 Database Mesh,Cloud Native 的研发。Linux,llvm,ya…

    数据库 2023年6月16日
    098
  • Linux平台Redis安装总结

    本文测试验证的操作系统为CentOS Linux release 7.8.2003 (Core),Redis版本为redis-6.0.8。 敬请注意,如有不同,请以实际情况为准。 …

    数据库 2023年6月11日
    051
  • mysql语法使用详细代码版

    mysql 1.什么是数据库 数据库:(DB,DataBase)作用:用来存储数据,管理数据。Txt,Excel,word是在数据库出现之前存储数据的。概念:数据仓库,安装在操作系…

    数据库 2023年5月24日
    067
  • 23种设计模式之模板模式

    文章目录 概述 模版模式的优缺点 * 优点 缺点 模版模式的使用场景 模板模式的结构和实现 * 模式结构 模式实现 总结 ; 概述 模板模式指:一个抽象类中,有一个主方法,再定义1…

    数据库 2023年6月6日
    093
  • JVM-方法区

    方法区 JAVA技术交流群:737698533 方法区是运行时数据区的最后一个内容,Method Area 栈,堆,方法区中的交互关系 方法区简述 方法区(Method Area)…

    数据库 2023年6月16日
    079
  • MySQL特性:ICP,Index Condition Pushdown

    ICP,Index Condition Pushdown 理解ICP特性前,先去前面理解MRR特性,了解where条件中的三阶段提取: index key、index filter…

    数据库 2023年6月16日
    071
  • Tomcat解压war包错误

    最近一个项目由于需要频繁发布,我又懒得把项目的war包和同名文件夹一起复制,一般发布war包等待war包自动解压来发布站点,当发布了39次时,war包解压异常最显著的信息是原来解压…

    数据库 2023年6月9日
    057
  • RocksDB线程局部缓存

    在开发过程中,我们经常会遇到并发问题,解决并发问题通常的方法是加锁保护,比如常用的spinlock,mutex或者rwlock,当然也可以采用无锁编程,对实现要求就比较高了。对于任…

    数据库 2023年6月9日
    073
  • Linux–>网络配置

    虚拟机NAT网络关系图 在Linux中查看网络配置 ifconfig ping 测试主机之间网络连通性 测试当前服务器是否可以连接目的主机 ping 目&am…

    数据库 2023年6月14日
    078
  • jieba分词java版本自定义stop_words

    背景 项目使用到jieba分词,分词部分结果产品不满意,想过滤一些不重要的高频词汇;我们是使用的结巴分词java版。maven引入如下: com.huaban jieba-anal…

    数据库 2023年6月11日
    082
  • [javaweb]监听器统计网页在线人数

    监听器 1.配置监听器 package com.javaweb.controller; import javax.servlet.ServletContext; import ja…

    数据库 2023年6月16日
    083
  • URL解码时,为什么将加号解码为空?

    以下代码在.NET Framework 2.0 中测试。 先看一个例子: test.aspx页面: 当参数 parameters 输出到页面后,值已经不为”A+B&#8…

    数据库 2023年6月11日
    050
  • Redis——数据操作(2)

    2022-09-21 (2)hash操作: ①设置多个hash值,(hmset): 查看说明: help hmset hmset person name A age 1 ②获得多个…

    数据库 2023年6月14日
    059
  • 视野 | OpenSearch,云厂商的新选择?

    王奇 顾问软件工程师目前从事 PaaS 中间件服务(Redis / MongoDB / ELK 等)开发工作,对 NoSQL 数据库有深入的研究以及丰富的二次开发经验,热衷对 No…

    数据库 2023年5月24日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球