| PID | quantity |
| A01 | 300 |
| A02 | 450 |
| B03 | 200 |
有A、B两个使用者,当A使用者执行交易(transaction)功能
BEGIN WORK
UPDATE product SET quantity = 100 WHERE PID=’A02′
COMMIT
B 使用者执行
SELECT quantity FROM product WHERE PID=’A02′
所得到的值是多少?
[adsense][/adsense]
这是MySQL 5实力养成暨评量里的8-56.‘请参阅附图中所显示的资料表product作答’
答案:B
提款机的同步功能常常在很多程式语言碰到,这回在MySQL上碰到了, 对刘子来说不认识COMMIT真是一个人间惨剧啊,所以赶紧打开深入浅出SQL的限制表、视观表、交易这一章来看。透过这样渐渐不为人知的土法练功,希望有朝一日可以练就为MySQL大师啊。
针对解题这个部份,ㄚ琪分享如下:
TRANSACTIONS:交易。一组必须同进退的查询;如果这些查询法全都执行完毕、不要干扰,则不承认其中部份查询造成的改变。
START TRANSACTIONS:这个叙述告诉RDBMS:“交易开始”。直到COMMIT执行前,改变都不具永久性。除非出现COMMIT或ROLLBACK,否则都在交易过程中;ROLLBACK可把资料库带回START TRANSACTION前的状态。
当然这一章的讲解很简单,而且没有提到BEGIN WORK,所以我们另外看一下手册的MySQL 5.7 Reference Manual :: 13 SQL Statement Syntax :: 13.3 MySQL Transactional and Locking Statements :: 13.3.1 START TRANSACTION, COMMIT, and ROLLBACK Syntax的说明
或是简体中文版的MySQL 5.1参考手册::13. SQL语句语法::13.4. MySQL事务处理和锁定语句::13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法
我转译一下语法及部份跟题意相关的部份:
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
START TRANSACTION或BEGIN语句可以开始一项新的交易。COMMIT可以提交当前交易,是变更成为永久变更。ROLLBACK可以回滚当前交易,取消其变更。SET AUTOCOMMIT语句可以禁用或启用预设的autocommit模式,用于当前连接。
BEGIN和BEGIN WORK被作为START TRANSACTION的别名受到支持,用于对交易进行初始化。START TRANSACTION是标准的SQL语法,并且是启动一个ad-hoc事务的推荐方法。BEGIN语句与BEGIN关键词的使用不同。BEGIN关键词可以启动一个BEGIN…END复合语句。后者不会开始一项事务。请参见20.2.7节,“BEGIN … END复合语句”。
学了这一篇的文章,或许我们MySQL的能力更强了~

1 則留言
Comments are closed.