首页 > 数据库 >mysql事务

mysql事务

时间:2022-12-09 15:55:05浏览次数:31  
标签:语句 事务 log 数据库 提交 mysql 日志

事务

事务是一个最小的执行单元。通常一个事务对应一个完整的业务,多个操作同时进行,要么同时成功,要么同时失败,就是事务。一个完整的业务需要批量的DML(数据操纵语言,指数据库增删改)语句共同联合完成。事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同。

事务特性

原子性

事务是一个不可分割的工作单位,要么同时成功,要么同时失败,这便是原子性。例如:当两个人发起转账业务时,如果A发起转账,而B因为一些原因不能成功接收,事务就会判为失败,也就是不会提交,A和B的转账也不会成功。

如何保证原子性?

对于A和B两操作要操作成功就一定需要更改到表的信息,如果A语句操作成功,而B语句因为一些原因终止操作了,所以事务没有成功,在没有提交事务之前,mysql会先将更新前的数据更新到undo log日志里面,因为事务没有成功而发生事务回滚时,会从undo log日志里面先前存好的数据,重新对数据库的数据进行数据的回退。

undo log日志:撤销回退的日志,主要存储数据库更新之前的数据,用于作备份

持久性

事务提交后,就是永久改变数据库数据。只要提交了事务,将会对数据库的数据进行永久性刷新

如何保证事务的持久性?

通过重做日志:redo log日志,将用户发生修改而未提交的数据存入redo log日志中,当发生断电等其他异常时,可以根据redo log日志重新对数据做一个提交,做一个恢复。

隔离性

事务与事务之间相互隔离,互不干扰。数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

一致性

在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

python应用方法

#! /use/bin/python
# -*- coding:UTF-8 -*-
import pymysql
# 创建连接
conn=pymysql.connect(host='127.0.0.1',port=3306,user='xxxx',passwd='xxxxx',db='xxxxx',charset='utf8')
#创建游标
cursor = conn.cursor()
try:
    # 执行sql语句
    cursor.execute("update account set money=money-600 where name='zhangsan'")
    cursor.execute("update account set money=money+600 where name='lisi'")
    # 提交到数据库执行
    db.commit()
except:
    # 发生错误时回滚    回滚到获取游标的位置开始重新执行  看代码上面的文字有说明
    db.rollback()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

标签:语句,事务,log,数据库,提交,mysql,日志
From: https://www.cnblogs.com/jianghao000/p/16969150.html

相关文章

  • 框架第二课---静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django模
    昨日内容回顾手写web框架1.socket服务端2.http协议3.网址后缀wsgiref模块1.封装socket代码2.处理http相关数据代码封装优化1.函数2.对应关系3.文件、目......
  • Django、连接mysql、模型
    目录今日内容概要今日内容详细静态文件配置静态文件相关配置form表单request对象pycharm连接数据库django连接数据库ORM简介ORM基本操作ORM基本语句今日内容概要静态文......
  • mysql 文本区分度
        SELECTcount(distinctleft(shop_name,5))/count(*)FROM`shop`; 索引长度和区分度是相互矛盾的,索引长度太短,那么区分度就很低,把索引长度加长......
  • mysql配置提高数据插入效率
    innodb_buffer_pool_sizeinnodb_buffer_pool_size默认值为32M,可以设置成128M。该参数表示mysql的Innodb存储引擎为优化查询性能而开辟出的一块内存缓冲区showglobal......
  • Mysql:mysql行转列(数值行和字符行)
    数值行转列建表DROPTABLEIFEXISTStb_score;CREATETABLEtb_score(idINT(11)NOTNULLauto_increment,useridVARCHAR(20)NOTNULLCOMMENT'用户id'......
  • Mysql 日期大小比较
    Mysql日期大小比较​​mysql时间参数年月日时分秒比较大小​​​​mysql时间参数年月日比较大小​​mysql时间参数年月日时分秒比较大小<selectid="checkTimeR......
  • Mysql开启ssl加密协议及Java客户端配置操作指南
    Mysql开启ssl加密协议及Java客户端配置操作指南​​Mysql配置​​​​验证Mysql开启SSL​​​​Java客户端操作​​​​生成证书密码​​​​配置数据库连接​​​​工具配......
  • Spring事务传播机制
    Spring事务传播机制​​Spring事务传播类型​​​​REQUIRED​​​​SUPPORTS​​​​MANDATORY​​​​REQUIRES_NEW​​​​NOT_SUPPORTED​​​​NEVER​​​​NESTED​......
  • Spring事务
    Spring支持两种方式事务管理编程式的事务管理通过TransactionTemplate手动管理事务(几乎没有人用)在实际应用中很少使用,原因是要修改原来的代码,加入事务管理代码(侵入性)使......
  • spring事务注解
    步骤:在需要管理事务的方法或者类上面添加@Transactional注解配置注解驱动事务管理(事务管理注解生效的作用)(需要配置对特定持久层框架使用的事务管理器)根据​​我spring的博......