您还可以使用快照隔离帮助您避免阻塞。因为使用快照隔离的事务仅查看已提交的数据,所以会计的事务不会阻塞销售经理的事务。
会计执行以下语句,为数据库启用快照隔离并指定使用的快照隔离级别:
SET OPTION PUBLIC.allow_snapshot_isolation = 'On'; SET TEMPORARY OPTION isolation_level = 'snapshot'; |
会计执行以下语句,列出太阳帽的价格:
SELECT ID, Name, UnitPrice FROM GROUPO.Products ORDER BY ID; |
ID | Name | UnitPrice |
---|---|---|
300 | Tee Shirt | 9.00 |
301 | Tee Shirt | 14.00 |
302 | Tee Shirt | 14.00 |
400 | Baseball Cap | 9.00 |
401 | Baseball Cap | 10.00 |
500 | Visor | 7.00 |
501 | Visor | 7.00 |
... | ... | ... |
销售经理执行以下语句,为塑料太阳帽定一个新的销售价格:
UPDATE GROUPO.Products SET UnitPrice = 5.95 WHERE ID = 501; COMMIT; SELECT ID, Name, UnitPrice FROM GROUPO.Products WHERE Name = 'Visor'; |
会计再次执行他的查询且并未看到价格的变化,这是因为事务使用第一次读取时提交的数据。
SELECT ID, Name, UnitPrice FROM GROUPO.Products; |
销售经理将塑料太阳帽的价格更改回其原来的价格:
UPDATE GROUPO.Products SET UnitPrice = 7.00 WHERE ID = 501; COMMIT; |
数据库服务器不会在 Products 表中会计正在读取的行上放置读锁定,因为会计正在查看销售经理对 Products 表进行任何修改之前获取的已提交数据的快照。
会计查看完价格后,由于他不希望无意中更改了数据库,因此使用 ROLLBACK 语句完成他的事务。
ROLLBACK; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |