MySQL学习之事务控制


本文摘自PHP中文网,作者coldplay.xixi,侵删。

什么是事务控制

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

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

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

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

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

相关免费学习推荐:mysql视频教程

事务的四个特性

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

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

MySQL的事务控制

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

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

例子

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

1

USE student;SHOW TABLES;

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

1

2

3

4

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值

1

SELECT @@autocommit;

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

1

SELECT * FROM bank_account;

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

1

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

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

1

SELECT * FROM bank_account;

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

1

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

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

1

SELECT * FROM bank_account;

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

更多相关免费学习推荐:mysql教程(视频)

以上就是MySQL学习之事务控制的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql存储过程的基本函数的相关讲解

mysql通过查询结果集更新数据的方法介绍

mysql当前时间增加5分钟的实现方法

如何解决mysql错误1054modify

怎么删除mysql用户名

数据库里的id是什么?

一次mysql死锁排查过程的全纪录

怎么查看mysql的版本?

mysql用什么代替in

mysql高并发生成唯一订单号

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...