MySQL 5.7从入门到精通主要包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与恢复、日志以及性能优化等。最后通过两个综合案例的数据库设计,进一步讲述MySQL在实际工作中的应用。
MySQL 5.7从入门到精通注重实战操作,帮助读者循序渐进地掌握MySQL中的各项技术。 本书共有480个实例和14个综合案例,还有大量的经典习题。下载文件中赠送了近20小时培训班形式的视频教学录像,详细讲解了书中每一个知识点和每一个数据库操作的方法和技巧。同时下载文件中还提供了本书所有例子的源代码,读者可以直接查看和调用。
目录
- 第1章 初识MySQL 1
- 1.1 数据库基础 1
- 1.1.1 什么是数据库 1
- 1.1.2 表 2
- 1.1.3 数据类型 2
- 1.1.4 主键 2
- 1.2 数据库技术构成 3
- 1.2.1 数据库系统 3
- 1.2.2 SQL语言 4
- 1.2.3 数据库访问接口 5
- 1.3 什么是MySQL 6
- 1.3.1 客户机-服务器软件 6
- 1.3.2 MySQL版本 6
- 1.3.3 MySQL的优势 7
- 1.3.4 MySQL 5.7的新功能 8
- 1.4 MySQL工具 8
- 1.4.1 MySQL命令行实用程序 9
- 1.4.2 MySQL Workbench 10
- 1.5 如何学习MySQL 10
- 第2章 MySQL的安装与配置 12
- 2.1 Windows平台下安装与配置MySQL 5.7 12
- 2.1.1 安装MySQL 5.7 12
- 2.1.2 配置MySQL 5.7 18
- 2.2 启动服务并登录MySQL数据库 22
- 2.2.1 启动MySQL服务 22
- 2.2.2 登录MySQL数据库 24
- 2.2.3 配置Path变量 27
- 2.3 MySQL常用图形管理工具 28
- 2.4 Linux平台下安装与配置MySQL 5.7 29
- 2.4.1 Linux操作系统下的MySQL版本介绍 29
- 2.4.2 安装和配置MySQL的RPM包 31
- 2.4.3 安装和配置MySQL的源码包 35
- 2.5 专家解惑 36
- 2.6 经典习题 36
- 第3章 数据库的基本操作 37
- 3.1 创建数据库 37
- 3.2 删除数据库 39
- 3.3 数据库存储引擎 39
- 3.3.1 MySQL存储引擎简介 39
- 3.3.2 InnoDB存储引擎 41
- 3.3.3 MyISAM存储引擎 42
- 3.3.4 MEMORY存储引擎 43
- 3.3.5 存储引擎的选择 43
- 3.4 综合案例——数据库的创建和删除 44
- 3.5 专家解惑 46
- 3.6 经典习题 46
- 第4章 数据表的基本操作 47
- 4.1 创建数据表 47
- 4.1.1 创建表的语法形式 47
- 4.1.2 使用主键约束 49
- 4.1.3 使用外键约束 50
- 4.1.4 使用非空约束 51
- 4.1.5 使用唯一性约束 52
- 4.1.6 使用默认约束 53
- 4.1.7 设置表的属性值自动增加 53
- 4.2 查看数据表结构 54
- 4.2.1 查看表基本结构语句DESCRIBE 54
- 4.2.2 查看表详细结构语句SHOW CREATE TABLE 55
- 4.3 修改数据表 56
- 4.3.1 修改表名 57
- 4.3.2 修改字段的数据类型 57
- 4.3.3 修改字段名 58
- 4.3.4 添加字段 59
- 4.3.5 删除字段 62
- 4.3.6 修改字段的排列位置 63
- 4.3.7 更改表的存储引擎 64
- 4.3.8 删除表的外键约束 65
- 4.4 删除数据表 67
- 4.4.1 删除没有被关联的表 67
- 4.4.2 删除被其他表关联的主表 67
- 4.5 综合案例——数据表的基本操作 69
- 4.6 专家解惑 77
- 4.7 经典习题 78
- 第5章 数据类型和运算符 80
- 5.1 MySQL数据类型介绍 80
- 5.1.1 整数类型 80
- 5.1.2 浮点数类型和定点数类型 82
- 5.1.3 日期与时间类型 84
- 5.1.4 文本字符串类型 96
- 5.1.5 二进制字符串类型 101
- 5.2 如何选择数据类型 104
- 5.3 常见运算符介绍 105
- 5.3.1 运算符概述 105
- 5.3.2 算术运算符 106
- 5.3.3 比较运算符 107
- 5.3.4 逻辑运算符 116
- 5.3.5 位运算符 119
- 5.3.6 运算符的优先级 122
- 5.4 综合案例——运算符的使用 123
- 5.5 专家解惑 125
- 5.6 经典习题 126
- 第6章 MySQL函数 127
- 6.1 MySQL函数简介 127
- 6.2 数学函数 128
- 6.2.1 绝对值函数ABS(x)和返回圆周率的函数PI() 128
- 6.2.2 平方根函数SQRT(x)和求余函数MOD(x,y) 128
- 6.2.3 获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x) 129
- 6.2.4 获取随机数的函数RAND()和RAND(x) 130
- 6.2.5 函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 130
- 6.2.6 符号函数SIGN(x) 131
- 6.2.7 幂运算函数POW(x,y)、POWER(x,y)和EXP(x) 132
- 6.2.8 对数运算函数LOG(x)和LOG10(x) 132
- 6.2.9 角度与弧度相互转换的函数RADIANS(x)和DEGREES(x) 133
- 6.2.10 正弦函数SIN(x)和反正弦函数ASIN(x) 133
- 6.2.11 余弦函数COS(x)和反余弦函数ACOS(x) 134
- 6.2.12 正切函数、反正切函数和余切函数 134
- 6.3 字符串函数 135
- 6.3.1 计算字符串字符数的函数和字符串长度的函数 135
- 6.3.2 合并字符串函数CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 136
- 6.3.3 替换字符串的函数INSERT(s1,x,len,s2) 137
- 6.3.4 字母大小写转换函数 137
- 6.3.5 获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n) 138
- 6.3.6 填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2) 139
- 6.3.7 删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s) 139
- 6.3.8 删除指定字符串的函数TRIM(s1 FROM s) 140
- 6.3.9 重复生成字符串的函数REPEAT(s,n) 141
- 6.3.10 空格函数SPACE(n)和替换函数REPLACE(s,s1,s2) 141
- 6.3.11 比较字符串大小的函数STRCMP(s1,s2) 142
- 6.3.12 获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len) 142
- 6.3.13 匹配子串开始位置的函数 143
- 6.3.14 字符串逆序的函数REVERSE(s) 143
- 6.3.15 返回指定位置的字符串的函数 144
- 6.3.16 返回指定字符串位置的函数FIELD(s,s1,s2,…) 144
- 6.3.17 返回子串位置的函数FIND_IN_SET(s1,s2) 145
- 6.3.18 选取字符串的函数MAKE_SET(x,s1,s2,…) 145
- 6.4 日期和时间函数 146
- 6.4.1 获取当前日期的函数和获取当前时间的函数 146
- 6.4.2 获取当前日期和时间的函数 146
- 6.4.3 UNIX时间戳函数 147
- 6.4.4 返回UTC日期的函数和返回UTC时间的函数 148
- 6.4.5 获取月份的函数MONTH(date)和MONTHNAME(date) 148
- 6.4.6 获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d) 149
- 6.4.7 获取星期数的函数WEEK(d)和WEEKOFYEAR(d) 150
- 6.4.8 获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d) 151
- 6.4.9 获取年份、季度、小时、分钟和秒钟的函数 151
- 6.4.10 获取日期的指定值的函数EXTRACT(type FROM date) 152
- 6.4.11 时间和秒钟转换的函数 153
- 6.4.12 计算日期和时间的函数 153
- 6.4.13 将日期和时间格式化的函数 156
- 6.5 条件判断函数 159
- 6.5.1 IF(expr,v1,v2)函数 159
- 6.5.2 IFNULL(v1,v2)函数 160
- 6.5.3 CASE函数 160
- 6.6 系统信息函数 161
- 6.6.1 获取MySQL版本号、连接数和数据库名的函数 161
- 6.6.2 获取用户名的函数 163
- 6.6.3 获取字符串的字符集和排序方式的函数 163
- 6.6.4 获取最后一个自动生成的ID值的函数 164
- 6.7 加/解密函数 166
- 6.7.1 加密函数PASSWORD(str) 166
- 6.7.2 加密函数MD5(str) 167
- 6.7.3 加密函数ENCODE(str,pswd_str) 167
- 6.7.4 解密函数DECODE(crypt_str,pswd_str) 167
- 6.8 其他函数 168
- 6.8.1 格式化函数FORMAT(x,n) 168
- 6.8.2 不同进制的数字进行转换的函数 168
- 6.8.3 IP地址与数字相互转换的函数 169
- 6.8.4 加锁函数和解锁函数 170
- 6.8.5 重复执行指定操作的函数 170
- 6.8.6 改变字符集的函数 171
- 6.8.7 改变数据类型的函数 172
- 6.9 综合案例——MySQL函数的使用 172
- 6.10 专家解惑 176
- 6.11 经典习题 176
- 第7章 查询数据 178
- 7.1 基本查询语句 178
- 7.2 单表查询 180
- 7.2.1 查询所有字段 181
- 7.2.2 查询指定字段 182
- 7.2.3 查询指定记录 184
- 7.2.4 带IN关键字的查询 185
- 7.2.5 带BETWEEN AND的范围查询 187
- 7.2.6 带LIKE的字符匹配查询 188
- 7.2.7 查询空值 190
- 7.2.8 带AND的多条件查询 191
- 7.2.9 带OR的多条件查询 192
- 7.2.10 查询结果不重复 193
- 7.2.11 对查询结果排序 195
- 7.2.12 分组查询 198
- 7.2.13 使用LIMIT限制查询结果的数量 203
- 7.3 使用聚合函数查询 205
- 7.3.1 COUNT()函数 205
- 7.3.2 SUM()函数 206
- 7.3.3 AVG()函数 207
- 7.3.4 MAX()函数 208
- 7.3.5 MIN()函数 209
- 7.4 连接查询 210
- 7.4.1 内连接查询 210
- 7.4.2 外连接查询 214
- 7.4.3 复合条件连接查询 216
- 7.5 子查询 217
- 7.5.1 带ANY、SOME关键字的子查询 217
- 7.5.2 带ALL关键字的子查询 218
- 7.5.3 带EXISTS关键字的子查询 218
- 7.5.4 带IN关键字的子查询 220
- 7.5.5 带比较运算符的子查询 221
- 7.6 合并查询结果 223
- 7.7 为表和字段取别名 225
- 7.7.1 为表取别名 226
- 7.7.2 为字段取别名 227
- 7.8 使用正则表达式查询 228
- 7.8.1 查询以特定字符或字符串开头的记录 229
- 7.8.2 查询以特定字符或字符串结尾的记录 230
- 7.8.3 用符号"."来替代字符串中的任意一个字符 230
- 7.8.4 使用"*"和" "来匹配多个字符 231
- 7.8.5 匹配指定字符串 231
- 7.8.6 匹配指定字符中的任意一个 233
- 7.8.7 匹配指定字符以外的字符 233
- 7.8.8 使用{n,}或者{n,m}来指定字符串连续出现的次数 234
- 7.9 综合案例——数据表查询操作 235
- 7.10 专家解惑 243
- 7.11 经典习题 244
- 第8章 插入、更新与删除数据 245
- 8.1 插入数据 245
- 8.1.1 为表的所有字段插入数据 245
- 8.1.2 为表的指定字段插入数据 247
- 8.1.3 同时插入多条记录 249
- 8.1.4 将查询结果插入到表中 251
- 8.2 更新数据 252
- 8.3 删除数据 254
- 8.4 综合案例——记录的插入、更新和删除 256
- 8.5 专家解惑 261
- 8.6 经典习题 262
- 第9章 索 引 263
- 9.1 索引简介 263
- 9.1.1 索引的含义和特点 263
- 9.1.2 索引的分类 264
- 9.1.3 索引的设计原则 265
- 9.2 创建索引 265
- 9.2.1 创建表的时候创建索引 266
- 9.2.2 在已经存在的表上创建索引 271
- 9.3 删除索引 278
- 9.4 综合案例——创建索引 280
- 9.5 专家解惑 283
- 9.6 经典习题 283
- 第10章 存储过程和函数 285
- 10.1 创建存储过程和函数 285
- 10.1.1 创建存储过程 286
- 10.1.2 创建存储函数 288
- 10.1.3 变量的使用 289
- 10.1.4 定义条件和处理程序 290
- 10.1.5 光标的使用 293
- 10.1.6 流程控制的使用 294
- 10.2 调用存储过程和函数 299
- 10.2.1 调用存储过程 299
- 10.2.2 调用存储函数 300
- 10.3 查看存储过程和函数 301
- 10.3.1 使用SHOW STATUS语句查看存储过程和函数的状态 301
- 10.3.2 使用SHOW CREATE语句查看存储过程和函数的定义 302
- 10.3.3 从information_schema.Routines表中查看存储过程和函数的信息 302
- 10.4 修改存储过程和函数 304
- 10.5 删除存储过程和函数 306
- 10.6 综合案例——创建存储过程和函数 306
- 10.7 专家解惑 309
- 10.8 经典习题 310
- 第11章 视图 311
- 11.1 视图概述 311
- 11.1.1 视图的含义 311
- 11.1.2 视图的作用 312
- 11.2 创建视图 313
- 11.2.1 创建视图的语法形式 313
- 11.2.2 在单表上创建视图 314
- 11.2.3 在多表上创建视图 315
- 11.3 查看视图 316
- 11.3.1 使用DESCRIBE语句查看视图基本信息 316
- 11.3.2 使用SHOW TABLE STATUS语句查看视图基本信息 316
- 11.3.3 使用SHOW CREATE VIEW语句查看视图详细信息 318
- 11.3.4 在views表中查看视图详细信息 318
- 11.4 修改视图 320
- 11.4.1 使用CREATE OR REPLACE VIEW语句修改视图 320
- 11.4.2 使用ALTER语句修改视图 321
- 11.5 更新视图 322
- 11.6 删除视图 324
- 11.7 综合案例——视图应用 325
- 11.8 专家解惑 333
- 11.9 经典习题 334
- 第12章 MySQL触发器 335
- 12.1 创建触发器 335
- 12.1.1 创建只有一个执行语句的触发器 336
- 12.1.2 创建有多个执行语句的触发器 337
- 12.2 查看触发器 339
- 12.2.1 SHOW TRIGGERS语句查看触发器信息 339
- 12.2.2 在triggers表中查看触发器信息 341
- 12.3 触发器的使用 342
- 12.4 删除触发器 343
- 12.5 综合案例——触发器的使用 344
- 12.6 专家解惑 346
- 12.7 经典习题 346
- 第13章 MySQL用户管理 347
- 13.1 权 限 表 347
- 13.1.1 user表 347
- 13.1.2 db表和host表 350
- 13.1.3 tables_priv表和columns_priv表 352
- 13.1.4 procs_priv表 353
- 13.2 账户管理 353
- 13.2.1 登录和退出MySQL服务器 354
- 13.2.2 新建普通用户 355
- 13.2.3 删除普通用户 359
- 13.2.4 root用户修改自己的密码 360
- 13.2.5 root用户修改普通用户的密码 362
- 13.2.6 普通用户修改密码 363
- 13.2.7 root用户密码丢失的解决办法 364
- 13.3 权限管理 366
- 13.3.1 MySQL的各种权限 366
- 13.3.2 授权 368
- 13.3.3 收回权限 370
- 13.3.4 查看权限 371
- 13.4 访问控制 372
- 13.4.1 连接核实阶段 372
- 13.4.2 请求核实阶段 372
- 13.5 综合案例——综合管理用户权限 373
- 13.6 专家解惑 377
- 13.7 经典习题 377
- 第14章 数据备份与恢复 379
- 14.1 数据备份 379
- 14.1.1 使用MySQLdump命令备份 379
- 14.1.2 直接复制整个数据库目录 386
- 14.1.3 使用MySQLhotcopy工具快速备份 386
- 14.2 数据恢复 387
- 14.2.1 使用MySQL命令恢复 387
- 14.2.2 直接复制到数据库目录 388
- 14.2.3 MySQLhotcopy快速恢复 388
- 14.3 数据库迁移 389
- 14.3.1 相同版本的MySQL数据库之间的迁移 389
- 14.3.2 不同版本的MySQL数据库之间的迁移 389
- 14.3.3 不同数据库之间的迁移 390
- 14.4 表的导出和导入 390
- 14.4.1 使用SELECTI…INTO OUTFILE导出文本文件 390
- 14.4.2 使用MySQLdump命令导出文本文件 394
- 14.4.3 使用MySQL命令导出文本文件 396
- 14.4.4 使用LOAD DATA INFILE方式导入文本文件 399
- 14.4.5 使用MySQLimport命令导入文本文件 402
- 14.5 综合案例——数据的备份与恢复 403
- 14.6 专家解惑 408
- 14.7 经典习题 409
- 第15章 MySQL日志 410
- 15.1 日志简介 410
- 15.2 二进制日志 411
- 15.2.1 启动和设置二进制日志 411
- 15.2.2 查看二进制日志 412
- 15.2.3 删除二进制日志 414
- 15.2.4 使用二进制日志恢复数据库 416
- 15.2.5 暂时停止二进制日志功能 417
- 15.3 错误日志 417
- 15.3.1 启动和设置错误日志 417
- 15.3.2 查看错误日志 418
- 15.3.3 删除错误日志 419
- 15.4 通用查询日志 419
- 15.4.1 启动和设置通用查询日志 419
- 15.4.2 查看通用查询日志 420
- 15.4.3 删除通用查询日志 420
- 15.5 慢查询日志 421
- 15.5.1 启动和设置慢查询日志 421
- 15.5.2 查看慢查询日志 421
- 15.5.3 删除慢查询日志 422
- 15.6 综合案例——MySQL日志的综合管理 422
- 15.7 专家解惑 428
- 15.8 经典习题 429
- 第16章 性能优化 430
- 16.1 优化简介 430
- 16.2 优化查询 431
- 16.2.1 分析查询语句 431
- 16.2.2 索引对查询速度的影响 435
- 16.2.3 使用索引查询 436
- 16.2.4 优化子查询 439
- 16.3 优化数据库结构 439
- 16.3.1 将字段很多的表分解成多个表 439
- 16.3.2 增加中间表 441
- 16.3.3 增加冗余字段 442
- 16.3.4 优化插入记录的速度 443
- 16.3.5 分析表、检查表和优化表 445
- 16.4 优化MySQL服务器 446
- 16.4.1 优化服务器硬件 447
- 16.4.2 优化MySQL的参数 447
- 16.5 综合案例——全面优化MySQL服务器 448
- 16.6 专家解惑 451
- 16.7 经典习题 452
- 第17章 MySQL Replication 453
- 17.1 MySQL Replication概述 453
- 17.2 Windows环境下的MySQL主从复制 454
- 17.2.1 复制前的准备工作 454
- 17.2.2 Windows环境下实现主从复制 455
- 17.2.3 Windows环境下主从复制测试 462
- 17.3 Linux环境下的MySQL复制 463
- 17.3.1 下载并安装MySQL 5.7 463
- 17.3.2 单机主从复制前的准备工作 465
- 17.3.3 MySQLd_multi实现单机主从复制 469
- 17.3.4 不同服务器之间实现主从复制 476
- 17.3.5 MySQL 主要复制启动选项 478
- 17.3.6 指定复制的数据库或者表 479
- 17.4 查看Slave的复制进度 486
- 17.5 日常管理和维护 488
- 17.5.1 了解服务器的状态 488
- 17.5.2 服务器复制出错的原因 489
- 17.6 切换主从服务器 492
- 17.7 专家解惑 496
- 17.8 经典习题 497
- 第18章 MySQL Workbench 的使用 498
- 18.1 MySQL Workbench简介 498
- 18.1.1 MySQL Workbench 的概述 498
- 18.1.2 MySQL Workbench 的优势 499
- 18.1.3 MySQL Workbench 的安装 499
- 18.2 SQL Development的基本操作 501
- 18.2.1 创建数据库连接 501
- 18.2.2 创建新的数据库 502
- 18.2.3 创建和删除新的数据表 504
- 18.2.4 添加、修改表记录 507
- 18.2.5 查询表记录 508
- 18.2.6 修改表结构 509
- 18.3 Data Modeling的基本操作 510
- 18.3.1 建立ER模型 510
- 18.3.2 导入ER模型 515
- 18.4 Server Administration的基本操作 517
- 18.4.1 管理MySQL用户 517
- 18.4.2 备份MySQL数据库 520
- 18.4.3 恢复MySQL数据库 523
- 18.5 专家解惑 524
- 18.6 经典习题 524
- 第19章 MySQL Cluster 526
- 19.1 MySQL Cluster概述 526
- 19.1.1 MySQL Cluster基本概念 526
- 19.1.2 理解MySQL Cluster节点 527
- 19.2 Linux环境下MySQL Cluster安装和配置 528
- 19.2.1 安装MySQL Cluster软件 531
- 19.2.2 管理节点配置步骤 535
- 19.2.3 配置SQL节点和数据节点 536
- 19.3 管理MySQL Cluster 537
- 19.3.1 Cluster的启动 537
- 19.3.2 Cluster的测试 539
- 19.3.3 Cluster的关闭 541
- 19.4 维护MySQL Cluster 542
- 19.4.1 Cluster的日志管理 544
- 19.4.2 Cluster的联机备份 545
- 19.4.3 Cluster的数据恢复 546
- 19.5 Windows操作系统中配置Cluster 547
- 19.6 专家解惑 553
- 19.7 经典习题 554
- 第20章 MySQL管理利器——MySQL Utilities 555
- 20.1 MySQL Utilities概述 555
- 20.2 安装与配置 556
- 20.2.1 下载与安装MySQL Utilities 556
- 20.2.2 MySQL Utilities连接数据库 559
- 20.3 管理与维护 560
- 20.3.1 使用mysqldbcompare比较数据 560
- 20.3.2 使用mysqldbcopy复制数据 561
- 20.3.3 使用mysqldbexport导出数据 561
- 20.3.4 使用mysqldbimport导入数据 562
- 20.3.5 使用mysqldiff比较对象的定义 562
- 20.4 专家解惑 563
- 20.5 经典习题 564
- 第21章 读写分离的利器——MySQL Proxy 565
- 21.1 概述 565
- 21.2 安装与配置 566
- 21.2.1 下载与安装MySQL Proxy 566
- 21.2.2 配置MySQL Proxy参数 567
- 21.2.3 配置Path变量 569
- 21.3 使用MySQL Proxy实现读写分离 571
- 21.4 专家解惑 572
- 21.5 经典习题 572
- 第22章 PHP操作MySQL数据库 573
- 22.1 PHP访问MySQL数据库的一般步骤 573
- 22.2 连接数据库前的准备工作 574
- 22.3 PHP操作MySQL数据库的函数 575
- 22.3.1 通过MySQLi类库访问MySQL数据库 575
- 22.3.2 使用MySQLi_connect()函数连接MySQL服务器 577
- 22.3.3 使用MySQLi_select_db()函数选择数据库文件 577
- 22.3.4 使用MySQLi_query()函数执行SQL语句 578
- 22.3.5 使用MySQLi_fetch_assoc ()函数从数组结果集中获取信息 578
- 22.3.6 使用MySQLi_fetch_object()函数从结果中获取一行作为对象 578
- 22.3.7 使用MySQLi_num_rows()函数获取查询结果集中的记录数 579
- 22.3.8 使用MySQLi_free_result()函数释放资源 579
- 22.3.9 使用MySQLi_close()函数关闭连接 579
- 22.4 综合实例1——使用insert语句动态添加用户信息 580
- 22.5 综合实例2——使用select语句查询数据信息 583
- 22.6 专家解惑 585
- 22.7 经典习题 585
- 第23章 新闻发布系统数据库设计 586
- 23.1 系统概述 586
- 23.2 系统功能 587
- 23.3 数据库设计和实现 588
- 23.3.1 设计表 588
- 23.3.2 设计索引 592
- 23.3.3 设计视图 593
- 23.3.4 设计触发器 594
- 23.4 案例总结 595
- 第24章 论坛管理系统数据库设计 596
- 24.1 系统概述 596
- 24.2 系统功能 597
- 24.3 数据库设计和实现 598
- 24.3.1 设计方案图表 598
- 24.3.2 设计表 600
- 24.3.3 设计索引 603
- 24.3.4 设计视图 604
- 24.3.5 设计触发器 605
- 24.4 案例总结 606