mysql 事务解析

 更新时间:2021年11月24日 08:47:04   作者:my_journey  
这篇文章主要给大家分享的是mysql事务解析,事务(transaction)是业务逻辑的一个基本的单元组成,下面文章围绕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 事务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Ubuntu安装Mysql+启用远程连接的完整过程

    Ubuntu安装Mysql+启用远程连接的完整过程

    这篇文章主要介绍了Ubuntu如何安装Mysql+启用远程连接,用ssh客户端或者云服务器厂家提供的网页版控制台都行,只要你能连上服务器就行,需要的朋友可以参考下
    2022-06-06
  • MySQL execute、executeUpdate、executeQuery三者的区别

    MySQL execute、executeUpdate、executeQuery三者的区别

    这篇文章主要介绍了MySQL execute、executeUpdate、executeQuery三者的区别的相关资料,需要的朋友可以参考下
    2017-05-05
  • MySql8设置远程连接的实战记录

    MySql8设置远程连接的实战记录

    与SQL Server类似,MySQL在需要远程操纵其他电脑时,也需要对其做远程连接的相应设置,下面这篇文章主要给大家介绍了关于MySql8设置远程连接的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 深入分析MySQL数据类型 DECIMAL

    深入分析MySQL数据类型 DECIMAL

    这篇文章主要介绍了MySQL数据类型 DECIMAL的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • 详解mysql 获取当前日期及格式化

    详解mysql 获取当前日期及格式化

    本篇文章主要介绍了mysql 获取当前日期及格式化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • mysql用户管理和权限设置方式

    mysql用户管理和权限设置方式

    这篇文章主要介绍了mysql用户管理和权限设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • MySQL的子查询中FROM和EXISTS子句的使用教程

    MySQL的子查询中FROM和EXISTS子句的使用教程

    这篇文章主要介绍了MySQL的子查询中FROM和EXISTS子句的使用教程,子查询是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-12-12
  • MySQL5.7完全卸载步骤详解

    MySQL5.7完全卸载步骤详解

    这篇文章主要介绍了MySQL5.7完全卸载的详细步骤以及把中间遇到的问题做了分析,需要的朋友跟着操作下吧。
    2018-02-02
  • Linux下安装mysql-5.6.4 的图文教程

    Linux下安装mysql-5.6.4 的图文教程

    在开始安装前,先说明一下mysql-5.6.4与较低的版本在安装上的区别,从mysql-5.5起,mysql源码安装开始使用cmake了,因此当我们配置安装目录./configure --perfix=/.....的时候和以前的会有些区别,这点我们稍后会提到
    2013-06-06
  • MySQL如何判断字符串为NULL或者为空字符串

    MySQL如何判断字符串为NULL或者为空字符串

    这篇文章主要介绍了MySQL如何判断字符串为NULL或者为空字符串,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论