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 事务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • window下mysql 8.0.15 安装配置方法图文教程

    window下mysql 8.0.15 安装配置方法图文教程

    这篇文章主要为大家详细介绍了window下mysql 8.0.15 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • Mysql树形递归查询的实现方法

    Mysql树形递归查询的实现方法

    这篇文章主要给大家介绍了关于Mysql树形递归查询的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • MySQL与PHP的基础与应用专题之内置函数

    MySQL与PHP的基础与应用专题之内置函数

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,本系列将带你掌握php与mysql的基础应用,本篇MySQL的内置函数开始
    2022-02-02
  • mysql设置值timestamp获取当前时间并自动更新方式

    mysql设置值timestamp获取当前时间并自动更新方式

    这篇文章主要介绍了mysql设置值timestamp获取当前时间并自动更新方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • mysql5.7 新增的json字段类型用法实例分析

    mysql5.7 新增的json字段类型用法实例分析

    这篇文章主要介绍了mysql5.7 新增的json字段类型用法,结合实例形式分析了mysql5.7 新增的json字段类型具体功能、使用方法及操作注意事项,需要的朋友可以参考下
    2020-02-02
  • MySQL8.0中的窗口函数的示例代码

    MySQL8.0中的窗口函数的示例代码

    本文主要介绍了MySQL8.0中的窗口函数的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 对MySQL几种联合查询的通俗解释

    对MySQL几种联合查询的通俗解释

    这篇文章主要介绍了LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。下面给个通俗的解释吧
    2015-01-01
  • MySQL中的max()函数使用教程

    MySQL中的max()函数使用教程

    这篇文章主要介绍了MySQL中的max()函数使用教程,是学习MySQL入门的基础知识,需要的朋友可以参考下
    2015-05-05
  • mysql不包含模糊查询问题

    mysql不包含模糊查询问题

    这篇文章主要介绍了mysql不包含模糊查询问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL数据权限的实现详情

    MySQL数据权限的实现详情

    这篇文章主要介绍了MySQL数据权限的实现详情,文章通过实际案例,从代码实战的角度来实现这样的一个数据权限。具体详细介绍,具有一定的参考价值
    2022-08-08

最新评论