MySQL学习(15)︱事务控制

什么是事务控制

事务是指作为一个逻辑工作单元执行的一系列操作,这些操作要么全部成功要么全部失败。事务确保了多个数据的修改作为一个单元来处理。

  • 在MySQL中,只有使用了Innodb存储引擎的数据库或表才支持事物
  • 事务用于维护数据库的完整性,保证成批的sql语句要么都执行,要么都不执行
  • 事务用于管理INSERTUPDATEDELETE语句

假如,张三在ATM机上给李四转账100元,在银行的业务系统中,主要会执行两步数据变更操作:

  1. 从张三的账户减去100元
  2. 给李四的账户增加100元

试问,如果操作1执行成功,操作2执行失败会发生什么?

事务的四个特性

如果某个数据库支持事务,那么该数据库必须具备ACID四个特性,即Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。

  • 原子性:事务必须是原子工作单元,事务中包含的各操作要么都做,要么都不做
  • 一致性:事务在执行完成时,必须使所有的数据都保持一致状态
  • 隔离性:事务独立运行。多个事务之间相互隔离,互不干扰。事务的100%隔离,会牺牲速度
  • 持续性:事务执行完成之后,它对系统的影响是永久性的

MySQL的事务控制

默认情况下,MySQL是自动提交事务的,即每一条INSERT、UPDATE、DELETE的SQL语句提交后会立即执行COMMIT操作。因此,要开启一个事务,可以使用start transactionbegin,或者将autocommit的值设置为0.

  • 方法一:在这里插入图片描述
  • 方法二:在这里插入图片描述

例子

  1. 登陆数据库,使用student数据库并查看所有的数据表
USE student;
SHOW TABLES;

在这里插入图片描述
2. 创建bank_account数据表并插入两条记录,设置张三的balance字段值+1000

CREATE TABLE bank_account(
	id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(30) COMMENT '姓名',
	balance DECIMAL(18, 2) COMMENT '账户余额'
);

INSERT INTO bank_account(id, name, balance) VALUE(1, '张三', 0);
INSERT INTO bank_account(id, name, balance) VALUE(2, '李四', 0);

UPDATE bank_account SET balance = balance + 1000 WHERE id = 1;

在这里插入图片描述
3. 查看默认的autocommit值

SELECT @@autocommit;

在这里插入图片描述
4. 查看bank_account数据表所有记录

SELECT * FROM bank_account;

在这里插入图片描述
5. 开始事务控制并执行两条SQL语句

START TRANSACTION;
UPDATE bank_account SET balance = balance - 100 WHERE id = 1;
UPDATE bank_account SET balance = balance + 100 WHERE id = 2;
COMMIT;

在这里插入图片描述
6. 查看此时数据表的内容

SELECT * FROM bank_account;

在这里插入图片描述
7. 再次开始事务控制,同样插入两条一样的SQL语句,但将commit(提交)变为rollback(回滚)

START TRANSACTION;
UPDATE bank_account SET balance = balance - 100 WHERE id = 1;
UPDATE bank_account SET balance = balance + 100 WHERE id = 2;
ROLLBACK;

在这里插入图片描述
8. 再次查看数据表内容,发现回滚之后数据无变化

SELECT * FROM bank_account;

在这里插入图片描述
注:本文是博主MySQL学习的总结,不支持任何商用,转载请注明出处!如果你也对MySQL学习有一定的兴趣和理解,欢迎随时找博主交流~

MySQL事务是一组关联的SQL操作,它们被看作是一个整体,要么全部执行成功,要么全部回滚。事务具有四个ACID属性:原子性、一致性、隔离性和持久性。 首先,原子性意味着事务中的所有操作要么全部成功执行,要么全部回滚。如果事务中的一个操作发生错误,会导致整个事务回滚到之前的状态。 其次,一致性表示事务执行完毕后,数据库将会进入一个有效的状态。在事务开始之前和结束之后,数据库的完整性约束必须得到保持,确保数据的正确性。 隔离性是指每个事务的操作在执行过程中是相互隔离的,不会互相干扰。事务并发执行时可能会出现的问题包括脏读、不可重复读和幻读。为了解决这些问题,数据库系统提供了四个隔离级别:未提交读取、已提交读取、可重复读取和串行化。 最后,持久性是指一旦事务被提交,对数据库的修改将会永久保存,即使在系统故障的情况下也是如此。数据库系统通过将事务的日志记录到磁盘上来实现持久性。 在MySQL中,可以使用START TRANSACTION语句来开始一个事务,COMMIT语句来提交一个事务,ROLLBACK语句来回滚一个事务。此外,可以使用事务控制语句来设置隔离级别,如SET TRANSACTION ISOLATION LEVEL。要保证事务的正确性和性能,还应注意事务的边界,避免事务嵌套过深。 深入学习MySQL事务需要理解事务的四个ACID属性以及MySQL事务控制语句。此外,还需要了解事务的隔离级别,以便在并发执行的情况下避免数据不一致的问题。掌握MySQL事务的概念和操作方法,可以保证数据库操作的一致性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值