美文网首页
mysql必知必会(26):事务

mysql必知必会(26):事务

作者: warmsirius | 来源:发表于2019-08-17 14:19 被阅读0次

一、事务

注意:InnoDB引擎支持事物,MyISAM引擎不支持事务。

事务处理:维护数据库的完整性,保证成批的MySQL操作要么完全执行,要么完全不执行。

  • 事务(transaction):一组SQL语句
  • 回退(rollback):撤销指定SQL语句
  • 提交(commit):指将未存储的SQL语句结果写入数据库表
  • 保留点(savepoint):指事务处理中设置的临时占位符,你可以对它发布回退(与回退整个事务处理不同)

二、控制事务处理

管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数
据何时应该回退,何时不应该回退。

  • MySQL使用下面语句来标识事务的开始
START TRANSACTION;

1. 使用ROLLBACK回退

SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;
  • 首先执行一条SELECT以显示该表不为空。
  • 然后开始一个事务处理,用一条DELETE语句删除ordertotals中的所有行。
  • 另一条SELECT语句验证ordertotals确实为空。
  • 这时用一条ROLLBACK语句回退START TRANSACTION之后的所有语句,最后一条SELECT语句显示该表不为.。

注意:ROLLBACK只能在一个事务处理内使用(在执行一条START
TRANSACTION命令之后)

那些语句可以回退?

  • INSERT
  • UPDATE
  • DELETE
  • SELECT(不可以使用这个语句)
  • CREATE、DROP(可以使用这个语句,但是不可以撤销操作)

2. 使用COMMIT提交

  • 隐含提交:提交(写或保存)操作是自动进行的。如一般的MySQL语句。

但是,在事务处理模块中,提交不会隐含地进行,必须明确用COMMIT来进行提交。

START TRANSACTION;
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;

在这个例子中,从系统中完全删除订单20010。因为涉及更新两个数据库表orders和orderItems,所以使用事务处理块来保证订单不被部分删除。最后的COMMIT语句仅在不出错时写出更改。如果第一条DELETE起作用,但第二条失败,则DELETE不会提交(实际上,它是被自动撤销的)。

隐含事务关闭

当COMMIT或ROLLBACK语句执行后,事务会自动关闭(将来的更改会隐含提交)。

3. 使用保留点

简单的事务可能只需要COMMIT或ROLLBACK,但是复杂的事务可能就需要b部分提交或回退。

  • 创建占位符(保留点)
SAVEPOINT 保留点名字;

注意:每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要回退到何处。

  • 回退到保留点
ROLLBACK TO 保留点名字;
  • 保留点越多越好
  • 释放保留点
    保留点在事务处理完成(执行一条ROLLBACK或COMMIT)后自动释放。自MySQL 5以来,也可以用RELEASE SAVEPOINT明确地释放保留点。

4. 更改默认的提交行为

默认的MySQL行为是自动提交的,如果要更改,需要使用以下语句:

SET autocommit=0

autocommit标志决定是否自动提交更改,不管有没有COMMIT语句。

设置autocommit为0(假)指示MySQL不自动提交更改(直到autocommit被设置为真为止)。

不管是平时的默认语句,还是事务,都需要commit之后才会提交,可以用两个终端来测试。

标志为连接专用: autocommit标志是针对每个连接而不是服
务器的。

相关文章

  • mysql必知必会(26):事务

    一、事务 注意:InnoDB引擎支持事物,MyISAM引擎不支持事务。 事务处理:维护数据库的完整性,保证成批的M...

  • 基础-事务、视图、存储过程、游标、约束、触发器、数据库安全

    内容来自《SQL必知必会》,《MySQL技术内幕》 SQL数据类型 事务 常识和数据库基本操作 1.事务处理:它是...

  • MySql 创建和操纵表

    创建表 更新表 参考书籍: MySQL必知必会

  • mysql必知必会

    2018年7月13日笔记 1.数据库的介绍 1.1 什么是数据库 数据库是按照数据结构来组织、存储和管理数据的仓库...

  • Mysql必知必会

    1.表中的任何列都可以作为主键, 只要它满足以下条件:任意两行都不具有相同的主键值;每一行都必须具有一个主键值( ...

  • MySQL必知必会

    分页 方式1:select * from table order by id limit m, n;该语句的意思为...

  • 《Mysql必知必会》

    厚道的人运气都不会太差,我们永远相信会有美好的事情发生

  • 必知必会 - Mysql

    存储引擎InnoDB InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page...

  • Mysql必知必会!

    数据库 1. 数据库概述 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按...

  • MYSQL必知必会

    第一章:了解SQL 数据库概念、表、列和数据类型、行、主键 第二章:MYSQL简介 1、mysql是一种DBMS(...

网友评论

      本文标题:mysql必知必会(26):事务

      本文链接:https://www.haomeiwen.com/subject/kanhsctx.html