新書推薦:
《
后希腊化哲学:从斯多亚学派到奥利金的发展研究
》
售價:HK$
76.8
《
别纠结啦:不被情绪牵着走的通透生活指南(“当代一休”小池龙之介治愈新作!附赠精美书签!)
》
售價:HK$
64.9
《
第二人生:找到重新定义人生的智慧
》
售價:HK$
96.8
《
唐朝三百年
》
售價:HK$
107.8
《
反操纵心理学:夺回人生主导权 拒绝被操纵
》
售價:HK$
54.8
《
同工异曲:跨文化阅读的启示(修订版)
》
售價:HK$
43.8
《
牛津立法研究手册
》
售價:HK$
358.6
《
制度为什么重要:政治科学中的新制度主义(人文社科悦读坊)
》
售價:HK$
63.8
|
編輯推薦: |
微软MVP、51CTO专家讲师韩立刚老师呕心著作,十余年企业实践经验 大学授课经验,毫无保留
●范式、多表联接、联接查询、存储过程、索引、触发、事务、锁
这些核心概念你真的懂吗?
●用*好懂的方式水煮讲解复杂概念,所有似懂非懂一扫而光!
●超10年企业实战经验与多年大学授课经验完美结合
●课本知识与企业需求无缝衔接,项目教学 案例教学 校企合作的完美实践
|
內容簡介: |
在软件设计和开发过程中,需求分析确定后,在开发软件前就需要先设计数据库,然后再编写代码。
韩立刚主编的这本《跟韩老师学SQL Server数据库设计与开发》讲解的内容是软件开发人员必须要掌握的技术,先讲解如何根据项目的需求按关系型数据库设计规范设计数据库中的表,然后使用自己设计的数据库来学习SQL语句。
本书完整地讲述了SQL语句中使用的变量、数据类型、注释行、运算符、常用函数,以及流程控制语句。从单表查询讲起,讲解使用WHERE筛选行将查询的结果分组、排序,然后讲解多表查询和数据汇总,讲解多表交叉联结、内联结、外联结、自联结,使用 UNION合并查询结果集,使用聚合函数汇总查询结果,接着讲解了子查询、开窗函数和行列转换技术,实现数据完整性,创建和使用索引优化性能,在数据库中创建和使用视图简化查询,使用存储过程操作数据库,创建用户自定义函数,在SQL语句中使用自定义函数,使用触发器实现复杂的业务逻辑,使用事务实现数据的完整性和一致性。
|
關於作者: |
本书是一本数据库设计与开发的创新型教材。
本书以SQL Server为平台,在满足知识系统性的前提下,重点解决数据库设计与开发的学习过程中的重点难点问题。全书力求深入浅出,生动有趣,贴合职业需求,以好教、好学、有用为标准,是一本真正具有创新意义的数据库技术教材经典。
在软件设计和开发过程中,需求分析确定后,在开发软件前就需要先设计数据库,然后再编写代码。本书讲解的内容是软件开发人员必须要掌握的技术,先讲解如何根据项目的需求按关系型数据库设计规范设计数据库中的表,然后使用自己设计的数据库来学习SQL语句。
本书完整地讲述了SQL语句中使用的变量、数据类型、注释行、运算符、常用函数,以及流程控制语句。从单表查询讲起,讲解使用WHERE筛选行将查询的结果分组、排序,然后讲解多表查询和数据汇总,讲解多表交叉联结、内联结、外联结、自联结,使用UNION合并查询结果集,使用聚合函数汇总查询结果,接着讲解了子查询、开窗函数和行列转换技术,实现数据完整性,创建和使用索引优化性能,在数据库中创建和使用视图简化查询,使用存储过程操作数据库,创建用户自定义函数,在SQL语句中使用自定义函数,使用触发器实现复杂的业务逻辑,使用事务实现数据的完整性和一致性。本书是一本数据库设计与开发的创新型教材。
本书以SQL Server为平台,在满足知识系统性的前提下,重点解决数据库设计与开发的学习过程中的重点难点问题。全书力求深入浅出,生动有趣,贴合职业需求,以好教、好学、有用为标准,是一本真正具有创新意义的数据库技术教材经典。
在软件设计和开发过程中,需求分析确定后,在开发软件前就需要先设计数据库,然后再编写代码。本书讲解的内容是软件开发人员必须要掌握的技术,先讲解如何根据项目的需求按关系型数据库设计规范设计数据库中的表,然后使用自己设计的数据库来学习SQL语句。
本书完整地讲述了SQL语句中使用的变量、数据类型、注释行、运算符、常用函数,以及流程控制语句。从单表查询讲起,讲解使用WHERE筛选行将查询的结果分组、排序,然后讲解多表查询和数据汇总,讲解多表交叉联结、内联结、外联结、自联结,使用UNION合并查询结果集,使用聚合函数汇总查询结果,接着讲解了子查询、开窗函数和行列转换技术,实现数据完整性,创建和使用索引优化性能,在数据库中创建和使用视图简化查询,使用存储过程操作数据库,创建用户自定义函数,在SQL语句中使用自定义函数,使用触发器实现复杂的业务逻辑,使用事务实现数据的完整性和一致性。
本书适合于本专科计算机专业或相关专业的数据库教学用书。也适合于数据库管理员、软件开发人员、企业IT运维人员及广大数据库爱好者自学使用
|
目錄:
|
前言
第1章 关系数据库 1
1.1 关系模型基本概念 1
1.2 E-R模型到关系模型的转化 3
1.3 数据库设计规范 6
1.3.1 第一范式(1NF) 6
1.3.2 第二范式(2NF) 7
1.3.3 第三范式(3NF) 8
第2章 Transact-SQL概述 10
2.1 启动SQLServer Management Studio(SSMS) 10
2.2 T-SQL语句的类型 12
2.2.1 DDL语句 12
2.2.2 DCL语句 13
2.2.3 DML 14
2.3 T-SQL语法要素 16
2.3.1 SQL语句的批处理符号GO 16
2.3.2 EXEC 17
2.3.3 注释符 17
2.3.4 标识符 18
2.4 变量 19
2.5 数据类型 21
2.5.1 字符串类型 21
2.5.2 Unicode字符串类型 23
2.5.3 日期时间类型 23
2.5.4 数值类型 23
2.6 运算符 25
2.6.1 算术运算符 25
2.6.2 比较运算符 25
2.6.3 逻辑运算符 25
2.6.4 连接运算符 26
2.7 常用函数 26
2.7.1 聚合函数 27
2.7.2 数值函数 28
2.7.3 字符串函数 29
2.7.4 日期时间函数 30
2.7.5 数据类型转换函数 31
2.7.6 控制NULL的常用函数 32
2.8 流程控制语句 32
2.8.1 条件判断语句IFELSE和CASE 33
2.8.2 循环语句 35
第3章 查询基础 36
3.1 简单查询逻辑处理过程 36
3.2 数据库对象的引用规则 39
3.3 指定表的返回列来筛选列 40
3.4 使用WHERE筛选行 41
3.4.1 使用比较运算符过滤数据 41
3.4.2 搜索范围内的值 41
3.4.3 使用IN指定列表搜索条件 42
3.4.4 使用LIKE关键字进行模糊匹配 42
3.4.5 使用NULL比较搜索条件 43
3.4.6 筛选时影响性能的注意事项 44
3.5 格式化结果集 44
3.5.1 在选择列表中使用常量、函数和表达式 44
3.5.2 使用别名 45
3.5.3 使用ORDERBY子句对结果排序 46
3.5.4 使用TOP限制结果集 48
3.5.5 使用DISTINCT消除重复行 50
3.6 使用GROUPBY子句和聚集函数进行分组计算 51
3.6.1 在查询中使用聚集函数 51
3.6.2 GROUP BY使用基础 52
3.6.3 使用HAVING子句筛选分组后的数据 53
第4章 多表联接查询和数据汇总 55
4.1 联接基础知识 55
4.1.1 在FROM子句中联接 56
4.1.2 在WHERE子句中联接 56
4.2 交叉联接 57
4.3 内联接 57
4.4 外联接 59
4.4.1 左外联接 59
4.4.2 右外联接 60
4.4.3 完全外部联接 60
4.5 自联接 62
4.5.1 使用同一列进行自联接 62
4.5.2 使用不同列进行自联接 62
4.6 联接查询的逻辑处理过程 64
4.7 多表联接查询 64
4.8 UNION合并结果集 64
4.8.1 UNION和UNIONALL 65
4.8.2 对合并结果集进行排序 66
4.8.3 结果集的合并顺序 66
4.9 汇总数据 67
4.9.1 ROLLUP 67
4.9.2 CUBE 70
4.9.3 使用GROUPING SETS 70
4.9.4 GROUPING查看汇总行并区分NULL 71
第5章 子查询 73
5.1 独立子查询 73
5.1.1 独立标量子查询 74
5.1.2 独立多值子查询 74
5.2 相关子查询 75
5.3 使用IN(NOT IN)和EXISTS(NOT EXISTS)谓词 76
5.3.1 IN和NOT IN 77
5.3.2 EXISTS和NOT EXISTS 77
5.4 表表达式 81
5.4.1 派生表 81
5.4.2 公用表表达式(CTE)84
第6章 开窗函数和行列转换 89
6.1 窗口和开窗函数 89
6.2 排名窗口函数 90
6.2.1 使用ROW_NUMBER进行分区编号 91
6.2.2 使用RANK和DENSE_RANK进行分区排名 94
6.2.3 使用NTILE进行数据分组 96
6.3 聚合窗口函数 97
6.4 行列转换 100
6.4.1 行转列 100
6.4.2 列转行 105
第7章 数据修改 109
7.1 插入数据 109
7.1.1 使用INSERT和VALUES插入数据109
7.1.2 使用SELECT INTO插入数据 110
7.1.3 使用INSERT和SELECT插入数据111
7.2 删除数据 112
7.2.1 使用DELETE删除行 112
7.2.2 使用TRUNCATE TABLE删除所有行 113
7.3 更新数据 113
7.3.1 使用SET和WHERE更新数据 113
7.3.2 更新基于其他表的数据 113
7.4 使用MERGE合并数据 114
7.5 通过表表达式修改数据 118
第8章 数据完整性 121
8.1 数据完整性的类型和实现方式 121
8.1.1 域完整性及实现方式 122
8.1.2 实体完整性及实现方式 122
8.1.3 参照完整性及实现方式 122
8.2 实现实体完整性 124
8.2.1 使用主键 124
8.2.2 使用UNIQUE约束 127
8.2.3 使用自增列 127
8.3 实现域完整性 131
8.3.1 CHECK约束 131
8.3.2 DEFAULT约束 132
8.3.3 NOT NULL定义 133
8.4 参照完整性 134
8.4.1 实现表间列的参照完整性 134
8.4.2 实现表内列的参照完整性 137
8.5 使用关系图实现参照完整性 138
8.6 使约束失效 141
8.7 使用图形界面实现数据完整性 141
8.7.1 添加主键 141
8.7.2 设置UNIQUE约束 142
8.7.3 设置CHECK约束 142
8.7.4 设置默认值约束 144
8.7.5 设置外键 145
8.7.6 禁用约束 147
第9章 索引 148
9.1 数据的存储方式 149
9.1.1 页(Page) 149
9.1.2 区(Extent) 152
9.1.3 索引分配映射页(IAM页)152
9.1.4 估算表的大小 153
9.2 B树(Balanced Tree) 154
9.3 查看页内容的工具 156
9.3.1 DBCC IND 156
9.3.2 DBCC PAGE 158
9.4 堆(Heaps) 160
9.5 聚集索引 162
9.5.1 约束与索引的关系 162
9.5.2 唯一聚集索引的物理结构 163
9.5.3 不唯一聚集索引的物理结构 167
9.5.4 使用聚集索引查找数据的执行计划 168
9.6 非聚集索引及其物理结构 169
9.6.1 在堆中的非聚集索引 169
9.6.2 在聚集表中的非聚集索引 172
9.6.3 使用非聚集索引查找数据的执行计划 175
9.7 修改数据对索引结构的影响 176
9.7.1 页拆分和行移动现象 176
9.7.2 插入行 178
9.7.3 删除行 179
9.7.4 更新行 180
9.8 碎片和索引维护 180
9.8.1 碎片 180
9.8.2 维护索引 182
9.9 复合索引 187
9.10 包含列索引 188
9.11 索引交叉 188
9.12 筛选索引 189
9.13 全文搜索 190
9.13.1 创建和修改全文目录 191
9.13.2 创建全文索引 191
9.13.3 全文搜索的查询方法 192
9.14 统计信息 194
9.14.1 了解统计信息的作用 194
9.14.2 查看和分析统计信息 195
9.14.3 创建统计信息 198
9.14.4 更新统计信息 198
9.14.5 同步和异步统计信息更新 200
9.15 基于索引设计的考虑 200
第10章 视图 202
10.1 视图简介 202
10.2 使用标准视图 204
10.2.1 创建标准视图 204
10.2.2 通过视图更新数据 206
10.2.3 修改和删除视图 208
10.3 视图选项 209
10.3.1 使用ENCRYPTION选项 209
10.3.2 使用SCHEMABINDING选项 210
10.3.3 使用CHECK OPTION选项 211
10.4 使用索引视图 212
10.4.1 创建索引视图 213
10.4.2 索引视图的性能 213
10.4.3 更新索引视图 214
10.5 视图的优点 215
第11章 存储过程 216
11.1 存储过程的类型 216
11.1.1 系统存储过程 217
11.1.2 扩展存储过程 217
11.1.3 用户自定义存储过程 217
11.2 SQL存储过程 218
11.2.1 创建无参数的存储过程 218
11.2.2 修改和删除存储过程 220
11.2.3 创建带参数的存储过程 221
11.2.4 获取存储过程的执行结果 223
11.3 存储过程示例分析 224
11.4 存储过程的解析特点 225
11.5 存储过程的编译、重编译 226
11.6 使用存储过程的优缺点 227
第12章 用户自定义函数 229
12.1 UDF简介 229
12.2 标量UDF 230
12.3 内联表值函数 232
12.4 多语句表值函数 233
12.5 UDF的修改和删除 235
12.6 UDF的调用分析 235
第13章 触发器 239
13.1 触发器的概念和分类 239
13.2 DML触发器 240
13.2.1 两张特殊的临时表 240
13.2.2 insert触发器 241
13.2.3 delete触发器 242
13.2.4 update触发器 244
13.2.5 禁用和启用触发器 244
13.2.6 检测基于列修改的触发器 244
13.2.7 FIRST触发器和LAST触发器 245
13.3 使用触发器实现审核跟踪 246
13.4 DML触发器的工作原理和事务控制 246
13.4.1 触发器的工作原理 247
13.4.2 DML触发器的事务控制 248
13.5 DDL触发器 249
13.5.1 创建数据库级别的DDL触发器249
13.5.2 创建服务器级别的DDL触发器250
第14章 事务和锁 251
14.1 事务 251
14.1.1 显式事务处理模式 252
14.1.2 自动提交事务模式 253
14.1.3 隐式事务处理模式 253
14.1.4 嵌套事务的控制 254
14.1.5 事务、事务日志和检查点 255
14.2 并发访问引起的问题 257
14.3 锁 260
14.3.1 锁的粒度和锁升级 260
14.3.2 锁的类型和查看锁 261
14.3.3 锁的兼容性 265
14.4 设置事务隔离级别 266
14.4.1 SQL标准定义的4种事务隔离级别 266
14.4.2 行版本的事务隔离级别 271
14.5 隔离级别、锁和并发问题的关系 274
14.6 死锁 275
前言
第1章 关系数据库 1
1.1 关系模型基本概念 1
1.2 E-R模型到关系模型的转化 3
1.3 数据库设计规范 6
1.3.1 第一范式(1NF) 6
1.3.2 第二范式(2NF) 7
1.3.3 第三范式(3NF) 8
第2章 Transact-SQL概述 10
2.1 启动SQL Server Management Studio(SSMS) 10
2.2 T-SQL语句的类型 12
2.2.1 DDL语句 12
2.2.2 DCL语句 13
2.2.3 DML 14
2.3 T-SQL语法要素 16
2.3.1 SQL语句的批处理符号GO 16
2.3.2 EXEC 17
2.3.3 注释符 17
2.3.4 标识符 18
2.4 变量 19
2.5 数据类型 21
2.5.1 字符串类型 21
2.5.2 Unicode字符串类型 23
2.5.3 日期时间类型 23
2.5.4 数值类型 23
2.6 运算符 25
2.6.1 算术运算符 25
2.6.2 比较运算符 25
2.6.3 逻辑运算符 25
2.6.4 连接运算符 26
2.7 常用函数 26
2.7.1 聚合函数 27
2.7.2 数值函数 28
2.7.3 字符串函数 29
2.7.4 日期时间函数 30
2.7.5 数据类型转换函数 31
2.7.6 控制NULL的常用函数 32
2.8 流程控制语句 32
2.8.1 条件判断语句IFELSE和CASE 33
2.8.2 循环语句 35
第3章 查询基础 36
3.1 简单查询逻辑处理过程 36
3.2 数据库对象的引用规则 39
3.3 指定表的返回列来筛选列 40
3.4 使用WHERE筛选行 41
3.4.1 使用比较运算符过滤数据 41
3.4.2 搜索范围内的值 41
3.4.3 使用IN指定列表搜索条件 42
3.4.4 使用LIKE关键字进行模糊匹配 42
3.4.5 使用NULL比较搜索条件 43
3.4.6 筛选时影响性能的注意事项 44
3.5 格式化结果集 44
3.5.1 在选择列表中使用常量、函数和表达式 44
3.5.2 使用别名 45
3.5.3 使用ORDER BY子句对结果排序 46
3.5.4 使用TOP限制结果集 48
3.5.5 使用DISTINCT消除重复行 50
3.6 使用GROUP BY子句和聚集函数进行
分组计算 51
3.6.1 在查询中使用聚集函数 51
3.6.2 GROUP BY使用基础 52
3.6.3 使用HAVING子句筛选分组后的数据 53
第4章 多表联接查询和数据汇总 55
4.1 联接基础知识 55
4.1.1 在FROM子句中联接 56
4.1.2 在WHERE子句中联接 56
4.2 交叉联接 57
4.3 内联接 57
4.4 外联接 59
4.4.1 左外联接 59
4.4.2 右外联接 60
4.4.3 完全外部联接 60
4.5 自联接 62
4.5.1 使用同一列进行自联接 62
4.5.2 使用不同列进行自联接 62
4.6 联接查询的逻辑处理过程 64
4.7 多表联接查询 64
4.8 UNION合并结果集 64
4.8.1 UNION和UNION ALL 65
4.8.2 对合并结果集进行排序 66
4.8.3 结果集的合并顺序 66
4.9 汇总数据 67
4.9.1 ROLLUP 67
4.9.2 CUBE 70
4.9.3 使用GROUPING SETS 70
4.9.4 GROUPING查看汇总行并区分NULL 71
第5章 子查询 73
5.1 独立子查询 73
5.1.1 独立标量子查询 74
5.1.2 独立多值子查询 74
5.2 相关子查询 75
5.3 使用IN(NOT IN)和EXISTS(NOT EXISTS)谓词 76
5.3.1 IN和NOT IN 77
5.3.2 EXISTS和NOT EXISTS 77
5.4 表表达式 81
5.4.1 派生表 81
5.4.2 公用表表达式(CTE) 84
第6章 开窗函数和行列转换 89
6.1 窗口和开窗函数 89
6.2 排名窗口函数 90
6.2.1 使用ROW_NUMBER进行分区编号 91
6.2.2 使用RANK和DENSE_RANK进行分区排名 94
6.2.3 使用NTILE进行数据分组 96
6.3 聚合窗口函数 97
6.4 行列转换 100
6.4.1 行转列 100
6.4.2 列转行 105
第7章 数据修改 109
7.1 插入数据 109
7.1.1 使用INSERT和VALUES插入数据 109
7.1.2 使用SELECT INTO插入数据 110
7.1.3 使用INSERT和SELECT插入数据 111
7.2 删除数据 112
7.2.1 使用DELETE删除行 112
7.2.2 使用TRUNCATE TABLE删除所有行 113
7.3 更新数据 113
7.3.1 使用SET和WHERE更新数据 113
7.3.2 更新基于其他表的数据 113
7.4 使用MERGE合并数据 114
7.5 通过表表达式修改数据 118
第8章 数据完整性 121
8.1 数据完整性的类型和实现方式 121
8.1.1 域完整性及实现方式 122
8.1.2 实体完整性及实现方式 122
8.1.3 参照完整性及实现方式 122
8.2 实现实体完整性 124
8.2.1 使用主键 124
8.2.2 使用UNIQUE约束 127
8.2.3 使用自增列 127
8.3 实现域完整性 131
8.3.1 CHECK约束 131
8.3.2 DEFAULT约束 132
8.3.3 NOT NULL定义 133
8.4 参照完整性 134
8.4.1 实现表间列的参照完整性 134
8.4.2 实现表内列的参照完整性 137
8.5 使用关系图实现参照完整性 138
8.6 使约束失效 141
8.7 使用图形界面实现数据完整性 141
8.7.1 添加主键 141
8.7.2 设置UNIQUE约束 142
8.7.3 设置CHECK约束 142
8.7.4 设置默认值约束 144
8.7.5 设置外键 145
8.7.6 禁用约束 147
第9章 索引 148
9.1 数据的存储方式 149
9.1.1 页(Page) 149
9.1.2 区(Extent) 152
9.1.3 索引分配映射页(IAM页) 152
9.1.4 估算表的大小 153
9.2 B树(Balanced Tree) 154
9.3 查看页内容的工具 156
9.3.1 DBCC IND 156
9.3.2 DBCC PAGE 158
9.4 堆(Heaps) 160
9.5 聚集索引 162
9.5.1 约束与索引的关系 162
9.5.2 唯一聚集索引的物理结构 163
9.5.3 不唯一聚集索引的物理结构 167
9.5.4 使用聚集索引查找数据的执行计划 168
9.6 非聚集索引及其物理结构 169
9.6.1 在堆中的非聚集索引 169
9.6.2 在聚集表中的非聚集索引 172
9.6.3 使用非聚集索引查找数据的执行计划 175
9.7 修改数据对索引结构的影响 176
9.7.1 页拆分和行移动现象 176
9.7.2 插入行 178
9.7.3 删除行 179
9.7.4 更新行 180
9.8 碎片和索引维护 180
9.8.1 碎片 180
9.8.2 维护索引 182
9.9 复合索引 187
9.10 包含列索引 188
9.11 索引交叉 188
9.12 筛选索引 189
9.13 全文搜索 190
9.13.1 创建和修改全文目录 191
9.13.2 创建全文索引 191
9.13.3 全文搜索的查询方法 192
9.14 统计信息 194
9.14.1 了解统计信息的作用 194
9.14.2 查看和分析统计信息 195
9.14.3 创建统计信息 198
9.14.4 更新统计信息 198
9.14.5 同步和异步统计信息更新 200
9.15 基于索引设计的考虑 200
第10章 视图 202
10.1 视图简介 202
10.2 使用标准视图 204
10.2.1 创建标准视图 204
10.2.2 通过视图更新数据 206
10.2.3 修改和删除视图 208
10.3 视图选项 209
10.3.1 使用ENCRYPTION选项 209
10.3.2 使用SCHEMABINDING选项 210
10.3.3 使用CHECK OPTION选项 211
10.4 使用索引视图 212
10.4.1 创建索引视图 213
10.4.2 索引视图的性能 213
10.4.3 更新索引视图 214
10.5 视图的优点 215
第11章 存储过程 216
11.1 存储过程的类型 216
11.1.1 系统存储过程 217
11.1.2 扩展存储过程 217
11.1.3 用户自定义存储过程 217
11.2 SQL存储过程 218
11.2.1 创建无参数的存储过程 218
11.2.2 修改和删除存储过程 220
11.2.3 创建带参数的存储过程 221
11.2.4 获取存储过程的执行结果 223
11.3 存储过程示例分析 224
11.4 存储过程的解析特点 225
11.5 存储过程的编译、重编译 226
11.6 使用存储过程的优缺点 227
第12章 用户自定义函数 229
12.1 UDF简介 229
12.2 标量UDF 230
12.3 内联表值函数 232
12.4 多语句表值函数 233
12.5 UDF的修改和删除 235
12.6 UDF的调用分析 235
第13章 触发器 239
13.1 触发器的概念和分类 239
13.2 DML触发器 240
13.2.1 两张特殊的临时表 240
13.2.2 insert触发器 241
13.2.3 delete触发器 242
13.2.4 update触发器 244
13.2.5 禁用和启用触发器 244
13.2.6 检测基于列修改的触发器 244
13.2.7 FIRST触发器和LAST触发器 245
13.3 使用触发器实现审核跟踪 246
13.4 DML触发器的工作原理和事务控制 246
13.4.1 触发器的工作原理 247
13.4.2 DML触发器的事务控制 248
13.5 DDL触发器 249
13.5.1 创建数据库级别的DDL触发器 249
13.5.2 创建服务器级别的DDL触发器 250
第14章 事务和锁 251
14.1 事务 251
14.1.1 显式事务处理模式 252
14.1.2 自动提交事务模式 253
14.1.3 隐式事务处理模式 253
14.1.4 嵌套事务的控制 254
14.1.5 事务、事务日志和检查点 255
14.2 并发访问引起的问题 257
14.3 锁 260
14.3.1 锁的粒度和锁升级 260
14.3.2 锁的类型和查看锁 261
14.3.3 锁的兼容性 265
14.4 设置事务隔离级别 266
14.4.1 SQL标准定义的4种事务隔离级别 266
14.4.2 行版本的事务隔离级别 271
14.5 隔离级别、锁和并发问题的关系 274
14.6 死锁 275
|
內容試閱:
|
基础不牢 地动山摇
●何去何从?
也许你正在大学学习数据库课程,也许你已从计算机或相关专业大学毕业,无论如何,你或多或少已听说了SQL、SQL Server、Oracle、DB、MySQL、Access等一大堆相关概念。倒底从哪里开始学?
SQL的英文全称是Structured Query Language,也就是结构化查询语言。SQL Server、Oracle、DB、MySQL、Access这些都是数据库系统,是关系型数据库系统。而SQL正是我们与这些数据库系统进行交流活动的语言。
所以,可以说SQL是关系型数据库的基础。
不必在意你选择的是SQL Server、Oracel或者是其它什么数据库系统,只要把SQL吃透,用哪个数据库系统开发学习,大同小异,易如反掌。而考虑到实验环境搭建的便利性以就业等因素,从SQL Server开始学习数据库知识是现在主流的教学实践。
●基础不牢,地动山摇
韩老师自从51CTO网络发布数据库视频课程以来,短短时间内已经有几十万人学习了他的课程,好评如潮。经过对学生的构成信息进行分析,我们发现,70%多的学生都是在大学期间已经学过这门课程的同学,他们为什么还要再次进行学习数据库知识?
从传统的计算机、网络、软硬件开发,到炙手可热的大数据、云计算、物联网,这些所有的技术像一座座高楼大厦拔地而起,数据库正如承载着这些建筑的地基。这就要求我们希望在IT领域某求发展或成功的学生,必须把数据库技术的学习作为一件基础任务,对任何概念或原理的不理解或似懂非懂,都可能让大厦面临不可预知的风险。
但显然,要想把数据库学好,有几个显而易见的困难。
其一,我们的传统数据库技术教材,一般较为晦涩难懂。这当然有其历史原因,IT技术当多数源自西方,我们起步时把西方的一些图书翻译过来作为我们的资料,很多教材也是源自这此最初的翻译资料。翻译这个事情,失真情况很不稀罕,对于初学者,书上有些内容看不懂时不必过早归结于是自己笨的原因。举个例子, 用例这个词是面向对象编程中最常用的术语之一,对这个词,很多初学者一头雾水,咱们中国本来没这个词儿啊!到底是啥意思?关于用例的概念,很多教材中了不吝笔墨叭啦叭啦讲一大堆,结果是越讲越糊涂。有些同学为了弄懂就各种查呀找呀,最终发现人家英文名本来叫case,一般我们可翻译为案例,如果把书上的用例换成案例,多少学生将会因此在软件道路上可以走得更远更好?历史原因很客观,但这不能成为我们在学习过程中不求甚解的理由,更不能成为教材编写者人云亦云的理由。
其二,我们的传统教材,对理论及重难点的讲解创新极少,一般是比别人咋讲我咋讲。所谓创新,并不是要求我们老师来推翻理论。古时侯养孩子没那么多适合婴儿吃的食品,一般是母亲把大人吃的东西嚼碎然后再喂孩子吃。学生在学习新知识时,其实与婴儿吃饭无异,对于教材中涉及的对于学生来说难于消化的理论或知识点,老师如果仅是照本宣科给学习讲一遍,意义不大,一定得把这些东西先行掰开嚼碎再喂给学生。根本的办法是,编写教材的老师能够用心,争取自己编写的教材对于难点的讲解更通俗,更易懂,更有趣。
其三,传统的教材与职业需求脱节。限于教材编写者自身的业务水平与讲师的业务水平,造成了有时候授课老师只讲会讲的,不讲有用的。这样的学生毕业后,如果想找到理想工作,必须重新学习提高。
基础不牢,地动山摇。学习过程困难万万千,工作的岗位上更是如此,克难而进还是得过且过,是职业生涯平庸与卓越的核心要素。
●数据库之Why &How
很多同学在总结为什么自己的数据库技术没有学好的时候,会把原因归结为自己不努力、自己不刻苦等原因。自我反省是必须的,但很多同学都没想到或者想到也不敢说:这个教材编写的水平太次!
好教材的标准很多,但有几个标准是必不可少的,一要让人看得懂,二要让人容易懂,三要让人喜欢看,第四是学会要有用。
我以数据库学习过来人的名义,以及51CTO视频学院中数十万学过韩老师视频课程的学员的名义,郑重向广大数据库初学者推荐韩老师的这本书。韩老师的这本书,完全体现了其视频课程的生动有趣、深入浅出、紧贴职业需求的特点,系统性却有大幅度提升。这是一本充满创新、真正经典、与时俱进、与众不同的数据库教科书。
周春元
本书策划编辑
|
|