《MySQL必知必会》学习笔记十六(事务处理)------掌握部分

MySQL必知必会知识预览
第一章——了解SQL
第二章——MySQL简介
第三章——使用MySQL
第四章——检索数据
第五章——排序检索数据
第六章——过滤数据
第七章——数据过滤
第八章——用通配符进行过滤
第九章——用正则表达式进行搜索
第十章——创建计算字段
第十一章——使用数据处理函数
第十二章——汇总数据
第十三章——分组数据
第十四章——使用子查询
第十五章——联结表
第十六章——创建高级联结
第十七章——组合查询
第十八章——全文本搜索
第十九章——插入数据
第二十章——更新和删除数据
第二十一章——创建和操纵表
第二十二章——使用视图
第二十三章——使用储存过程
第二十四章——使用游标
第二十五章——使用触发器
第二十六章——管理事务处理
第二十七章——全球化和本地化
第二十八章——安全管理
第二十九章——数据库维护
第三十章——改善性能
————————————– 华丽的分隔符 ————————————————–

事务处理

什么是事务处理 如何管理事务处理

————————————– ————————————– ————————————–

注意:
并非所有的引擎指出事务处理。MyISAM(更常用) 和Innodb是两种最常用的引擎,前者(MyISAM )不支持明确的事务处理管理,后者(Innodb)支持。
如果你要在应用中需要事务处理功能,则一定要使用正确的引擎类型。

事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

关系数据库设计把数据存储在多个表中,使数据更容易操纵、维护和重用。在某种程度上说,设计良好的数据库模式都是关联的。

事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,他们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整组语句提交到数据库表,如果发生错误,则进行回退,以恢复数据库到某个已知且安全的状态。

就例如银行转账,汇款方和收款方对金额的改变就放在一个事务中,要么同时执行,要么同时不执行,这样的话,才能保证金额的正确性。

术语介绍:
1. 事务(transaction)指一组sql语句。
2. 回退(rollback) 指撤销指定sql语句的过程。
3. 提交(submmit)指将未存储的sql语句结果写入到数据库表中。
4. 保留点(savepoint)事务处理中设置的临时占位符,可以发布回退。

控制事务处理

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

事务开始

START TRANSACTION 标识着事务的开始

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 命令用来回退(撤销)MySQL语句。
ROLLBACK之能在一个事务处理内使用(在执行一条start transcation命令之后)

哪些语句可以退回?
事务处理用来管理insert、update。和delete语句的。不能退回select语句,不能退回create和drop 操作。可以在事务中使用,但是回退时,不会被撤销。

事务提交

使用 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 语句执行后,事务会进行自动关闭(预测将来的更改会隐含提交)。

使用保留点

简单的rollback和 commit语句就可以撤销或写入整个事务处理。但是,只是对简单的事务处理才能这样做。更复杂的事务处理可能需要部分提交或回退。

考虑前一个删除订单过程,如果发生错误,只需要返回到第一行即可,而不需要回退到整个开始(如果存在的话)。那么我们就需要保留点。

为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符(保留点)。

语法: SAVEPOINT delete1;

每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道回退到何处,为了回退到保留点,我们使用ROLLBACK delete1;语句进行回退。

保留点越多越好,因为保留点越多,我们就越能按照自己的意愿灵活地进行回退。
释放保留点 保留点在事务处理完成(执行ROLLBACK或COMMIT)后会自动释放。我们也可以利用RELEASE SAVEPOINT明确的释放保留点,一般都是默认的自释放。

更改默认的提交行为 // set autocommit=0;
默认的MySQL行为是自动提交所有更改。也就是说,任何时候你执行一条MySQL语句,该语句实际上都是针对表执行的,而且所做的更改立即执行。为了指示不自动提交更改,我们可以使用【 SET autocommit=0;】语句
autocommit 标志决定是否自动提交更改,不管有没有commit语句,设置autocommit为0(假)指示MySQL不自动提交更改(直到autocommit被设置为真为止)。
Autocommit 标识是针对每个连接而不是服务器的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值