首页 > 数据库 >mysql事务

mysql事务

时间:2024-05-10 09:02:57浏览次数:28  
标签:事务 隔离 -- money 提交 mysql 1000

1. 事务

  事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。


2. 控制事务


  • 控制事务一
  1. 查看/设置事务提交方式
SELECT @@autocommit ;

SET @@autocommit = 0 ;
  1. 提交事务
COMMIT;
  1. 回滚事务
ROLLBACK;

注意:

上述的这种方式,我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交, 需要手动的执行commit进行提交。


  • 控制事务二
  1. 开启事务
START TRANSACTION 或 BEGIN ;
  1. 提交事务
COMMIT;
  1. 回滚事务
ROLLBACK;


案例:

-- 开启事务
start transaction

-- 1. 查询张三余额
select * from account where name = '张三';

-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';

-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';

-- 如果正常执行完毕, 则提交事务
commit;

-- 如果执行过程中报错, 则回滚事务
rollback;


3. 事务四大特性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

上述就是事务的四大特性,简称ACID。


4. 并发事务问题

  • 赃读:一个事务读到另外一个事务还没有提交的数据。

  • 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
      

  • 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 "幻影"。
      


5. 事务隔离级别

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

  • 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
  • 设置事务隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

注意:事务隔离级别越高,数据越安全,但是性能越低。

标签:事务,隔离,--,money,提交,mysql,1000
From: https://www.cnblogs.com/pine1203/p/18182797

相关文章

  • Linux问题--docker启动mysql时提示3306端口被占用(kill不掉3306端口)
    使用kill-9杀掉mysqld服务时一直失败。mysql启动时会启动mysqld和mysqld_safe两个进程,当使用kill-9杀掉mysqld进程时,mysqld_safe会自动重新启动mysqld。当使用正常方式退出mysqld时,mysqld_safe也会退出。如果需要kill掉mysqld服务可以先通过lsof-i:3306查询到占用3306......
  • [转帖]Mysql数据库的事务特性、隔离级别及MVCC多版本并发控制简介
    https://my.oschina.net/tongchengyu/blog/4714950事务的特性数据库如果支持事务,就要满足下面四个特性(ACID)。原子性(A:Atomicity)在一个事务中,多个sql操作,要么一起成功(所有数据操作都成功),要么一起回滚(其中一个没有成功,其他数据操作一起恢复到开始状态)。一致性(C:Consisten......
  • mysql面试
    001Mysql如何实现索引机制MySQL中索引分三类:B+树索引,Hash索引,全文索引InnoDB索引和MySAM索引实现的区别是什么?MySAMMySAM索引文件和数据是分离的,使用B+树实现,主键索引和辅助索引实现一致,索引文件仅保存记录所以在页的指针(物理地址),通过这些地址来读取页,进而读取被索引的行 ......
  • MySQL 创建数据库使用 UTF-8 问题
    问题描述将emoji符号(如......
  • mysql - mysql 命令行的使用
    1.Mysql管理连接数据库--连接本地数据库mysql-uroot-p--连接远程数据库mysql-h192.168.0.105-uroot-p--连接远程指定数据库并设置字符集mysql-h192.168.0.105-uroot-p--default-character-set=utf8test修改root密码,直接修改配置文件[mysql]......
  • 【转】[MySQL] 忘记密码的处理之 Windows 篇
    来自:阿里的通义灵码在Windows环境下,如果你忘记了MySQL的root密码,可以通过以下步骤重置:停止MySQL服务:打开“服务”管理工具(可以通过运行 services.msc 或搜索“服务”找到)。找到名为 MySQL 或 MySQL80(根据你的版本)的服务,然后右键选择“停止”。找到MySQ......
  • 【转】[MySQL] 忘记密码的处理之 Linux 篇
    来自:阿里的通义灵码如果你忘记了MySQL的root用户密码,可以按照以下步骤重置:方法1:使用 mysqld_safe 跳过授权表停止MySQL服务:bash sudoservicemysqlstop启动MySQL并跳过授权表:bash sudomysqld_safe--skip-grant-tables&登录到MyS......
  • mysql8.0数据库添加用户和授权
    MySql8有新的安全要求,不能像之前的版本那样一次性创建用户并授权需要先创建用户,再进行授权操作1.创建新用户createuser'username'@'host'identifiedby'password';其中username为自定义的用户名;host为登录域名,host为'%'时表示为任意IP,为localhost时表示本机,或者填写指......
  • Python 如何优雅的操作 PyMySQL
    一、PyMysql在使用Python操作MySQL数据过的过程中,基本的增删改查操作如何更加高效优雅的执行。这里将以PyMySQL为例,介绍一下如何使用Python操作数据库。Python对MySQL数据库进行操作,基本思路是先连接数据库Connection对象,建立游标Cursor对象,然后执行SQL语句对数据库进行操作......
  • mysql多表查询
    1.多表查询  项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一)多对多一对一2.分类连接查询内连接:相当于查询A、B交集部分数据外......