MySQL事务

事务概念

事务一般包含了一系列的数据库读写操作,简而言之,事务中的一系列操作要成功就是全部操作成功,只要一个操作失败,整个事务操作失败。事务操作包含以下两个目的:

  1. 为数据库操作提供从失败恢复正常的方法,同时保证在失败情况下依然保持数据一致性
  2. 当有多个并发程序访问数据库时,可以在应用程序之间提供一个隔离方法,有效防止程序之间彼此的操作
    当事务被提交给了数据库管理系统(DBMS),则DBMS需要保证所有操作成功完成并保存到数据库中去,当事务中的某一操作未完成,则事务中的所有操作都需要回滚,回到事务执行前的状态,保证数据一致性;同时改事务的执行对数据库中的其他事物的操作没有影响。
  3. 例子
    某人要在商店使用电子货币购买100元的东西,当中至少包括两个操作:
    该人账户减少100元
    商店账户增加100元
    支持事务的数据库管理系统(transactional DBMS)就是要确保以上两个操作(整个“事务”)都能完成,或一起取消;否则就会出现100元平白消失或出现的情况。
    但在现实情况下,失败的风险很高。在一个数据库事务的执行过程中,有可能会遇上事务操作失败、数据库系统/操作系统出错,甚至是存储介质出错等情况。这便需要DBMS对一个执行失败的事务执行恢复操作,将其数据库状态恢复到一致状态(数据的一致性得到保证的状态)。为了实现将数据库状态恢复到一致状态的功能,DBMS通常需要维护事务日志以追踪事务中所有影响数据库数据的操作。

ACID性质

  • 原子性(Atomicity):事务作为整体执行,包含在事务中对数据库的操作,要么全部执行,要不都不执行。
  • 一致性(Consistency):事务应该保证数据库的状态从一个一致性状态转换到另一个一致性状态。一致性状态指的是数据库中的数据应该满足完整性约束。
  • 隔离性(Isolation):多个事务并发操作,一个事务的执行不应当影响其他事务的执行。
  • 持久性(Durability):已提交的事务应当永久保存到数据库中。

MySql事务基本语法

-- 使用set语句来改变自动提交模式
set autocommit = 0; /*关闭事务自动提交*/
set autocommit = 1; /*开启事务自动提交*/

-- attention
-- 1.MySQL中默认事务自动提交
-- 2.使用事务操作之前应当先关闭事务自动提交

-- 开始一个事务,标记事务的起始点
start transaction;

-- 调教一个事务给数据库
commit;

-- 将事务回滚,数据回到本次事务的初始状态
rollback;

-- 保存点
savepoint 保存点名称 -- 设置一个事务保存点
rollback to savepoint 保存点名称 -- 回滚到保存点
release savepoint 保存点名称 -- 删除保存点

实例测试

问题:
A在线买一款价格为500元商品,网上银行转账.
A的银行卡余额为2000,然后给商家B支付500.
商家B一开始的银行卡余额为10000

  • 创建表account并插入2条数据
create table `account`(
    `id` int(8) not null auto_increment,
    `name` varchar(32) not null,
    `cash` decimal(9,2) not null,
    primary key (`id`)
)engine=Innodb default charset=utf8
insert into `account`(`name`,`cash`) values ('A',2000.00),('B',1000.00)

在这里插入图片描述

  • 转账实现
set autocommit = 0; -- 关闭自动提交
start transaction; -- 开始一个事务,标记事务的起始点
update account set cash = cash - 500 where name = 'A';
update account set cash = cash + 500 where name = 'B';
commit; -- 提交事务
# rollback
set autocommit = 1; -- 恢复自动提交

在这里插入图片描述

MySQL 事务是指一组数据库操作,这些操作要么全部执行,要么全部不执行,其目的是保证在并发环境下,数据的一致性和完整性。MySQL 事务具有 ACID 性质,即原子性、一致性、隔离性和持久性。 MySQL 中使用事务需要使用 BEGIN、COMMIT 和 ROLLBACK 语句,其中 BEGIN 表示开启一个事务,COMMIT 表示提交事务,ROLLBACK 表示回滚事务事务的基本语法如下: ``` BEGIN; -- 执行一组数据库操作 COMMIT; -- 提交事务 -- 或者 ROLLBACK; -- 回滚事务 ``` 在 MySQL 中,事务的隔离级别分为四个等级,分别是 Read Uncommitted、Read Committed、Repeatable Read 和 Serializable。隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。 MySQL 事务的 ACID 性质有以下含义: 1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚,不会只执行其中的一部分操作。 2. 一致性(Consistency):事务执行前后,数据库中的数据必须保持一致性状态,即满足数据库的约束条件和完整性规则。 3. 隔离性(Isolation):事务之间应该是相互隔离的,一个事务的执行不应该被其他事务干扰,保证事务之间的数据相互独立。 4. 持久性(Durability):事务提交后,对数据库的修改应该是永久性的,即使出现系统故障或电源故障,也不应该对数据产生影响。 总之,MySQL 事务是一组数据库操作,具有 ACID 性质,可以通过 BEGIN、COMMIT 和 ROLLBACK 语句来实现,隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heromps

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值