首页 > 数据库 >Mysql 事务

Mysql 事务

时间:2023-06-22 22:32:04浏览次数:50  
标签:事务 log 提交 Mysql 一致性 redo 读取

1.事务基本特性ACID

1.1 原子性:

          指的是一个事务中的操作要么全部成功,要么全部失败。

1.2 一致性

         指的是数据库总是从一个一致性的状态转换到另外一个一致性的状态。比如A转账给B100块钱,假设中间sql执行过程中系统崩溃A也不会损失100块,因为事务没有提交,修改也就不会保存到数据库。

1.3 隔离性

         指的是一个事务的修改在最终提交前,对其他事务是不可见的。

1.4 持久性

         指的是一旦事务提交,所做的修改就会永久保存到数据库中。

2.ACID靠什么保证

A 原子性由undo log日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql;

C 一致性一般由代码层面来保证;

I 隔离性由MVCC来保证;

D 持久性由内存+redo log来保证,mysql修改数据同时在内存和redo log记录这次操作,事务提交的时候通过redo log刷盘,宕机的时候可以从redo log恢复;

3.隔离性有4个隔离级别

3.1 read uncommit 读未提交

可能会读到其他事务未提交的数据,也叫做脏读。

用户本来应该读取到id=1的用户age应该是10,结果读取到了其他事务还没有提交的事务,结果读取结果age=20,这就是脏读。

3.2 read commit 读已提交

 两次读取结果不一致,叫做不可重复读。

 不可重复读解决了脏读的问题,他只会读取已经提交的事务。

 用户开启事务读取id=1用户,查询到age=10,再次读取发现结果=20,在同一个事务里同一个查询读取到不同的结果叫做不可重复读。

3.3 repeatable read 可重复复读

这是mysql的默认级别,就是每次读取结果都一样,但是有可能产生幻读。

3.4 serializable 串行

一般是不会使用的,他会给每一行读取的数据加锁,会导致大量超时和锁竞争的问题。

标签:事务,log,提交,Mysql,一致性,redo,读取
From: https://blog.51cto.com/u_15558311/6535955

相关文章

  • mysql
    一登录mysql 1.windowsCMD登录输入mysql -uroot-p1234562.mysql命令界面登录:输入密码1234563. 命令行登录:在navicat中连接mysql输入密码123456二 初识mysql数据库简介1.为何需要数据库可以持久化2.数据库能够做什么存储大量数据,方便检索和访问(数据库中的数据量大)......
  • MYSQL中find_in_set函数用法详解
    感谢参考:https://blog.csdn.net/carefree31441/article/details/1195636851、官方涵义(MySQL手册中语法说明)FIND_IN_SET(str,strlist):str要查询的字符串,strlist需查询的字段,参数以”,”分隔,形式如(1,2,6,8,10,22);该函数的作用是查询字段(strlist)中是否包含(str)的结果,返......
  • mysql与oracle的日期时间函数小结
    本文的日期/时间全部格式化为”2016-01-0101:01:01“形式;MONITOR_TIME为数据库表字段;字符串与日期/时间相互转换函数Oracle日期/时间转字符串函数:to_char(t.MONITOR_TIME,‘yyyy-mm-ddhh24:mi:ss‘)asmonitorTime字符串转日期/时间函数:TO_Date(”2016-01-0101:01:01“,......
  • MySQL 日期与字符串互相转换总结
    第一种情况:日期转字符串1、函数:date_format(date,format)selectdate_format(now(),'%Y-%m-%d%H:%i:%S');第二种情况:日期转时间戳1、函数:unix_timestamp(data)selectunix_timestamp(now());第三种情况:字符串转日期1、函数:str_to_date(str,format);注:format格式必须......
  • Spring boot 手动开启事务 手动提交 手动回滚
    直接上代码@ServicepublicclassXXXService{//这两个必须要注入@ResourceDataSourceTransactionManagerdataSourceTransactionManager;@ResourceTransactionDefinitiontransactionDefinition;publicvoidmethod1(){//开启事务......
  • centos8 安装mysql8.0.33
    一、在官网下载mysql源 [root@zabbix-server~]#wgethttps://dev.mysql.com/get/mysql80-community-release-el8-5.noarch.rpm  二、安装mysql[root@zabbix-server~]#yuminstall-ymysql80-community-release-el8-5.noarch.rpm[root@zabbix-server~]#yum-y......
  • MySQL中str_to_date函数和cast函数
    MySQL怎么将字符串转为datetime类型?两种转换方法:1、使用str_to_date()函数,可以格式化字符串,根据指定格式将其转为日期时间值,语法“str_to_date(字符串值,转换格式)”。2、使用CAST()函数,可以将指定字符串值转换为datetime数据类型,语法“CAST(字符串值ASdatetime)”。MySQLDAT......
  • MySQL之存储过程
    存储过程语法:--创建存储过程createprocedure存储名称(参数列表)begin sql语句end;--调用存储过程call存储过程的名称(参数列表);--查看存储过程showcreateprocedureP1;--删除存储过程dropprocedureP1;注意:在控制台创建存储过程的时候,因为在begin里面的SQL语......
  • MySQL给查询出的数据增加序号
    前言我们都知道,在Oracle中,可以使用ROW_NUMBER()OVER()函数给查询的结果加序号。不了解请点击:ROW_NUMBER()OVER()MySQL几乎模拟了Oracle,SQLServer等商业数据库的大部分功能,函数。MySQL8.0版本以后才会有这个函数,之前版本是没有的MySQL给查出的数据加序号的方法一种......
  • MySQL处理字符串的两个绝招:substring_index,concat
    1、substring_index(str,delim,count)str:要处理的字符串delim:分隔符***count:计数***例子:str=www.google.comsubstring_index(str,'.',1)结果是:wwwsubstring_index(str,'.',2)结果是:www.google也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容......