首页 > 数据库 >Mysql事务

Mysql事务

时间:2024-05-24 19:29:06浏览次数:19  
标签:事务 set -- money 提交 Mysql 1000

1. 概述

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

注意: 默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐式的提交事务。

2. 事务操作

2.1 方式一
  • 查看默认提交: select @@autocommit;
  • 设置手动提交: set @@autocommit = 0;
  • 提交事务: commit ;
  • 回滚事务: rollback ;

代码演示:

-- ---------------------------------------方式一
# 查看默认提交
select @@autocommit;
# 设置手动提交
set @@autocommit = 0;

# 模拟转账
-- 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 ;

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

2.2 方式二 
  • 开启事务: start transaction;
  • 提交事务: commit ;
  • 回滚事务: 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. 事务四大特性

  1. 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  2. 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  3. 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  4. 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

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

4. 并发事务问题

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

比如B读取到了A未提交的数据。

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


事务A两次读取同一条记录,但是读取到的数据却是不一样的。

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

5. 事务隔离级别

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

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read(默认)××
Serializable×××

1). 查看事务隔离级别

select @@transaction_isolation;

2). 设置事务隔离级别

-- 设置隔离级别
set session transaction isolation level read committed ;
-- 设置默认隔离级别
set session transaction isolation level repeatable read ;

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

标签:事务,set,--,money,提交,Mysql,1000
From: https://blog.csdn.net/2401_83430041/article/details/139181339

相关文章

  • MySQl存储引擎
    1.体系结构1.1连接层最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可......
  • MySQL查询某个字段含有字母数字的值
    1.正则表达式(REGEXP)查询MySQL表中某个字段含有字母和数字的值,可以使用正则表达式(REGEXP)来匹配这样的模式。在MySQL中,正则表达式是一个强大的工具,可以用来搜索和匹配字符串中的特定模式。假设我们有一个名为my_table的表,并且我们想要查询名为my_column的字段,这个字段包含至少一个......
  • MySQL查询某个字段含有字母数字的值
    1.正则表达式(REGEXP)查询MySQL表中某个字段含有字母和数字的值,可以使用正则表达式(REGEXP)来匹配这样的模式。在MySQL中,正则表达式是一个强大的工具,可以用来搜索和匹配字符串中的特定模式。假设我们有一个名为my_table的表,并且我们想要查询名为my_column的字段,这个字段包含至少......
  • MySQL 5.7 升级到 8.0
    1.升级前检查wgethttps://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit.tar.gztarxfmysql-shell-8.0.36-linux-glibc2.12-x86-64bit.tar.gz-C/tmp/cd/tmp/mysql-shell-8.0.34-linux-glibc2.12-x86-64bit/bin./mysqlsh-u......
  • MySQL入门——基础语法
    数据库的操作显示当前的数据库创建数据库语法:CREATEDATABASE[IFNOTEXISTS]db_name[create_specification[,create_specification]...]create_specification:[DEFAULT]CHARACTERSETcharset_name[DEFAULT]COLLATEcollation_name说明:大写的表示关键字......
  • MySQL优化
    MySQL优化创建高性能索引索引基础知识何为索引?索引有哪些类型?深入探索B+Tree索引B+Tree基本知识查询遍历插入删除创建高性能索引策略前缀索引多列索引聚簇索引覆盖索引查询性能优化创建高性能索引索引基础知识何为索引?索引,在MySQL中也叫作键(key),是存储引擎用......
  • MySQL的四⼤特性
    MySQL的四大特性原子性例子如何保证原子性?分布式数据库如何保证原子性?一致性如何保证一致性?隔离性如果无法保证隔离性会发生什么?脏读不可重复读幻读如何保证隔离性?持久性如何保证持久性?意外情况怎么解决?MySQL数据库有原⼦性(Atomicity)、⼀致性(Consistency)、......
  • MYSQL分页优化
    分布式任务调度内的MySQL分页查询优化 作者:vivo互联网数据库团队- QiuXinbo本文主要通过图示介绍了用主键进行分片查询的过程,介绍了主键分页查询存在SQL性能问题,如何去创建高效的索引去优化主键分页查询的SQL性能问题。对于数据分布不均如何发现,提供了一些SQL查询案......
  • 深入《MySQL视图》及《MySQL索引与分区》
    一. MySQL视图#MySQL视图深度指南:从新手到专家欢迎来到这篇全面的MySQL视图教程。在数据库的世界中,视图(View)是一个强大的工具,它允许你以一种安全且用户友好的方式操作数据。本篇博文将带你了解什么是视图、如何创建它们,以及如何有效地使用视图来简化你的数据库操作。##什......
  • mysql 中索引类型有哪些,以及对数据库的性能的影响?
    索引类型普通索引:允许被索引的数据列包含重复的值唯一索引:可以保证数据记录的唯一性主键索引:是一种特殊的唯一素引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字primarykey来创建联合索引:索引可以覆盖多个数据列全文索引:通过建立倒排索引,可以极大......