Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103564214
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564225
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564226
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564227
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564228
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564229
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564230
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564231
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564232
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564233
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564234
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564235
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564236
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564237
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564238
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564229
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564240
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564241
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564242
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564243
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564244
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564245
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564246
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564247
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564248
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564249
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564250
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564251
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564252
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564253
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564244
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564255
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564256
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564257
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564258
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564259
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564261
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564263
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564264
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564265
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564266
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564267
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564268
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564259
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564270
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564271
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564272
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564273
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564274
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564275
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564276
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性(2)-sdccf-ChinaUnix博客
  • 博客访问: 103564277
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 19:16:32

developerWorks



事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108158) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108157) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108156) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108154) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108153) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108152) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108151) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108150) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108147) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108145) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108144) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108142) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108141) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108140) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108139) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108138) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108137) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108136) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108135) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108134) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108133) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108132) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108131) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108130) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108127) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108126) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108125) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108124) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108123) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108122) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108121) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108119) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108117) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108116) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108114) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108113) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108111) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108110) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108108) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


事务

什么是数据一致性?回答这个问题的最佳方法是通过研究示例。假定您的公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的货物存储量。为了使货物采购过程更方便,数据库包含每个连锁店的库存表。每当一家饭店收到或用掉一部分货物时,与该饭店相应的库存表就会被修改以反映库存变化。

现在,假定从一家店调配若干瓶番茄酱到另一家店。为了准确地表示这一次库存调配,调出方饭店表中存储的番茄酱瓶数必须减少,而接收方饭店表中存储的番茄酱瓶数必须增加。如果用户减少了调出方饭店库存表中的番茄酱瓶数,但没有增加接收方库存表中的番茄酱瓶数,则数据就会变得不一致。此时所有连锁店的番茄酱的总瓶数不再准确了。

如果用户忘记了进行所有必要的更改(正如在前面的示例中一样),或者如果在用户进行更改的过程中系统崩溃了,又或者如果数据库应用程序由于某种原因过早地停止了,数据库中的数据都会变得不一致。当几个用户同时访问相同的数据库表时,也可能发生不一致。为了防止数据的不一致(尤其是在多用户环境中),DB2 的设计中集成了下列数据一致性支持机制:

  • 事务
  • 隔离级别






事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库一致性点;要么将一个事务中执行的所有 SQL 操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有 SQL 操作的结果(回滚)。

使用从 Command Center、Script Center 或 Command Line Processor 运行的嵌入式 SQL 应用程序和脚本,在可执行 SQL 语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit) 的过程(在这种情况下,发出的每个单独的 SQL 语句被看作单个事务,它一执行就隐式地提交了)。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了 —— 即,它们被写到磁盘。当执行 ROLLBACK 语句时,自从事务启动以来对数据库所做的一切更改都被撤消,而数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是需要用户或应用程序来确保每个事务中执行的 SQL 操作序列始终会导致一致的数据库。







正如在前面提到的,通常通过执行 COMMIT 或 ROLLBACK SQL 语句来终止事务。为了理解这些语句如何工作,研究一个示例是有帮助的。

如果按所示的顺序执行下列 SQL 语句:



                    
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
COMMIT    
	    
INSERT INTO DEPARTMENT VALUES(300, 'SALES')
ROLLBACK  
	    
INSERT INTO DEPARTMENT VALUES(500, 'MARKETING')
COMMIT
	

这将创建一个名为 DEPARTMENT 的表,它的结构如下所示:

DEPT_ID DEPT_NAME
100 PAYROLL
200 ACCOUNTING
500 MARKETING

这是因为当执行第一个 COMMIT 语句时,创建名为 DEPARTMENT 的表并向 DEPARTMENT 表中插入两条记录,这两个操作都会变成永久性的。另一方面,当执行 ROLLBACK 语句时,删除插入 DEPARTMENT 表中的第三条记录,该表返回到执行插入操作之前所处的状态。最后,当执行第二个 COMMIT 语句时,插入到 DEPARTMENT 中的第四条记录成为永久性的,而数据库再次返回到一致状态。

正如可以从这个示例中看到的,提交或回滚操作只影响在这个操作所结束的事务内做出的更改。只要数据更改仍然未被提交,其他用户和应用程序通常就无法看见它们(也有例外情况,稍后我们将进行讨论),并可以通过执行回滚操作取消它们。但是,一旦数据更改被提交了,其他用户和应用程序就可以访问它们,并且再也不能通过回滚操作取消它们了。







我们刚才已看到当通过 COMMIT 或 ROLLBACK 语句终止事务时会发生什么。但是,如果在事务完成前出现系统故障,那会发生什么情况呢?在这种情况下,DB2 数据库管理程序会取消所有未提交的更改,从而恢复数据库一致性(假定在事务启动时存在这样的一致性)。图 1 对比了成功的事务和在成功终止之前失败的事务的效果。



事务
阅读(108107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~