您还可以使用快照隔离帮助您避免阻塞。因为使用快照隔离的事务仅查看已提交的数据,所以会计的事务不会阻塞销售经理的事务。
启动 Interactive SQL。
在 [连接] 窗口中,以销售经理的身份连接到 SQL Anywhere 示例数据库:
从 [操作] 下拉列表中单击 [连接到 ODBC 数据源]。
单击 [ODBC 数据源名称],然后在下方的字段中键入 SQL Anywhere 12 Demo。
如有必要,可单击 [高级] 以显示 [高级选项] 选项卡。
单击 [高级选项] 选项卡,在 [ConnectionName] 字段中键入 Sales Manager。
单击 [连接]。
再启动一个 Interactive SQL 的实例。
在 [连接] 窗口中,以会计的身份连接到 SQL Anywhere 示例数据库:
在 [操作] 下拉列表中单击 [使用 ODBC 数据源连接]。
单击 [ODBC 数据源名称],然后在下方的字段中键入 SQL Anywhere 12 Demo。
如有必要,可单击 [高级] 按钮以显示 [高级选项] 选项卡。
单击 [高级选项] 选项卡,在 [ConnectionName] 字段中键入 Accountant。
单击 [连接]。
作为会计,执行以下语句为数据库启用快照隔离,并指定使用快照隔离级别:
SET OPTION PUBLIC.allow_snapshot_isolation = 'On'; SET TEMPORARY OPTION isolation_level = 'snapshot'; |
会计决定列出太阳帽的价格。作为会计,执行以下语句:
SELECT ID, Name, UnitPrice FROM 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 Products SET UnitPrice = 5.95 WHERE ID = 501; COMMIT; SELECT ID, Name, UnitPrice FROM Products WHERE Name = 'Visor'; |
会计再次执行他的查询且并未看到价格的变化,这是因为事务使用第一次读取时提交的数据。
SELECT ID, Name, UnitPrice FROM Products; |
作为销售经理,将塑料太阳帽的价格更改回其原来的价格。
UPDATE Products SET UnitPrice = 7.00 WHERE ID = 501; COMMIT; |
数据库服务器不会在 Products 表中会计正在读取的行上放置读锁定,因为会计正在查看销售经理对 Products 表进行任何修改之前获取的已提交数据的快照。
会计查看完价格后,由于他不希望无意中更改了数据库,因此使用 ROLLBACK 语句完成他的事务。
ROLLBACK; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |