可以使用快照隔离级别维护与隔离级别 3 相同的一致性,而且不会造成任何种类的阻塞。销售经理的语句不会被阻塞,会计也不会看到幻像行。
会计执行以下语句来启用快照隔离:
SET OPTION PUBLIC. allow_snapshot_isolation = 'On'; SET TEMPORARY OPTION isolation_level = 'snapshot'; |
执行以下语句来列出所有部门:
SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
销售经理决定设立一个新部门,专门管理国外市场。Philip Chin(EmployeeID 为 129)将作为这个新部门的经理。销售经理执行以下语句为新部门创建一个新条目,该条目作为一个新行出现在销售经理窗口的表底部:
INSERT INTO GROUPO.Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES( 600, 'Foreign Sales', 129 ); COMMIT; |
销售经理执行以下语句,列出所有部门:
SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
600 | Foreign Sales | 129 |
会计可以再次执行他的查询,并且不会看到新行,这是因为事务尚未提交。
SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
而销售经理想要再增加一个部门来处理针对大型企业合作伙伴的销售业务。销售经理执行以下语句:
INSERT INTO GROUPO.Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES( 700, 'Major Account Sales', 902 ); |
销售经理的更改未被阻塞,因为会计在使用快照隔离。
会计必须结束他的快照事务,以查看销售经理提交到数据库的更改。
COMMIT; SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
现在会计看到了 Foreign Sales 部门,但没有看到 Major Account Sales 部门。
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
600 | Foreign Sales | 129 |
为了避免更改 SQL Anywhere 示例数据,您应该回退未完成的插入 Major Account Sales 部门行的事务,并使用另一个事务删除 Foreign Sales 部门。
销售经理执行以下语句来回退当前事务、删除之前插入的行并提交该操作:
ROLLBACK; DELETE FROM GROUPO.Departments WHERE DepartmentID = 600; COMMIT; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |