第1部分 初识MySQL 1
第1章 MySQL的概要 2
1.1数据库的概要 2
1.1.1数据库是什么 2
1.1.2关系数据库是什么 3
1.1.3数据库的特征 4
1.2 MySQL是什么样的数据库 5
1.2.1 MySQL是开源软件 5
1.2.2 MySQL的历史 5
1.2.3 MySQL的两种版本 6
1.2.4 MySQL的特征 6
1.3 SQL的概要 8
1.3.1什么是SQL 8
1.3.2首先熟悉SELECT命令 8
1.4总结 9
第2章 MySQL的环境配置 10
2.1本书中使用的软件 10
专栏XAMPP 11
2.2学习MySQL前的准备(安装和配置) 11
2.2.1关于本书使用的MAMP 11
专栏 如果文件的扩展名未显示 12
2.2.2安装MAM P 12
2.2.3 MAMP的启动和设置 16
专栏 什么是localhost 19
2.2.4确认开始页 19
2.2.5构成MAMP的文件夹 20
2.3 MySQL的路径设置 21
2.4关于中文的设置 23
2.4.1 MySQL的字符编码设置 23
2.4.2修改my.ini 24
2.5本书中使用的表 25
2.5.1销售信息表tb(按员工号统计的月销售额) 25
2.5.2员工信息表tb1(各员工号代表的员工的姓名、年龄) 26
2.6总结 27
专栏 关于macOS版的MAMP 27
第2部分 MySQL的基础知识 29
第3章 MySQL监视器 30
3.1创建数据库前的准备事项 30
3.2什么是MySQL监视器 30
3.3启动MySQL监视器 31
3.3.1启动终端软件 31
3.3.2启动MySQL监视器 32
专栏 命令提示符的UTF-8设置 33
3.3.3当MySQL监视器无法启动时 34
专栏 全角空格和半角空格 34
3.3.4确认MySQL中字符编码的设置情况 34
3.4 MySQL监视器的退出操作和密码设置 35
3.4.1退出MySQL监视器 35
3.4.2使用历史命令 36
3.4.3安全地输入密码 36
专栏 mysql命令的选项 37
3.5设置MySQL管理员root的密码 37
3.5.1修改root用户的密码 37
3.5.2修改MAMP的设置 38
3.5.3修改phpMyAdmin的设置 38
3.6总结 39
专栏 PowerShell和命令提示符 40
第4章 创建数据库 41
4.1创建数据库 41
4.1.1创建数据库 41
专栏 在租赁服务器上使用MySQL 42
4.2确认创建的数据库 43
4.2.1确认数据库 43
4.2.2 test和mysql数据库 44
4.3指定使用的数据库 44
4.3.1指定数据库 44
专栏 选择数据库启动MySQL监视器 45
4.4创建表tb 1 45
4.4.1列和字段 46
4.4.2数据类型 46
4.4.3创建表 46
专栏 使用?把数据库名括起来 47
4.5显示所有的表 47
4.5.1显示所有的表 47
专栏 访问其他数据库 48
4.6确认表的列结构 49
4.6.1确认表的列结构 49
专栏特殊的SHOW 50
4.7向表中插入数据 50
4.7.1插入数据 50
4.7.2向表tb1中添加第2条记录 52
4.7.3指定列名插入记录 53
4.7.4一次性输入记录 53
4.8显示数据 54
4.8.1显示数据 54
4.9(准备)复制表tb1 56
4.10总结 57
专栏 MySQL的文档 59
第5章 数据类型和数据输入 60
5.1什么是数据类型 60
5.2数值类型 61
5.2.1数值类型的种类 61
5.2.2输入数值数据 62
5.3字符串类型 62
5.3.1字符串类型的种类 62
5.3.2输入字符串 63
5.3.3 VARCHAR和CHAR的位数单位 63
5.4日期与时间类型 63
5.4.1日期与时间类型的种类 63
5.4.2输入日期与时间类型的数据 64
专栏修改提示符的字符串 65
5.5总结 66
第6章 修改表 68
6.1修改表的列结构 68
6.1.1 ALTER TABLE命令 68
6.2修改列的数据类型 69
专栏 修改数据类型要慎重 70
6.3添加列 70
6.3.1添加员工信息记录 72
6.4修改列的位置 73
6.4.1把列添加到最前面 73
6.4.2把列添加到任意位置 74
6.4.3修改列的顺序 74
6.5修改列名和数据类型 75
6.5.1修改列的数据类型或位置的同时也修改列名 75
6.6删除列 77
专栏 故意输入超过指定数量的字符 78
6.7设置主键 78
6.7.1什么是唯一 78
6.7.2什么是主键 79
6.7.3创建主键 79
6.7.4确认主键 80
6.7.5设置唯一键 81
6.8使列具有自动连续编号功能 82
6.8.1具有自动连续编号功能的列的定义 82
6.8.2创建具有自动连续编号功能的列 82
专栏 其他RDBMS中自动连续编号功能的设置 83
6.9使用自动连续编号功能插入记录 84
6.9.1确认插入的记录 85
6.10设置连续编号的初始值 85
6.10.1连续编号的初始化 85
6.11设置列的默认值 87
6.11.1修改列结构的定义 87
6.11.2输入数据 88
专栏 数据库的实体是什么 89
6.12创建索引 91
6.12.1什么是索引 91
6.12.2创建索引 91
6.12.3显示索引 91
6.12.4删除索引 92
专栏 索引和处理速度的关系 93
6.13总结 93
第7章 复制、删除表和记录 96
7.1复制表的列结构和记录 96
7.2将表的列结构和记录整个复制过来 96
7.2.1复制表的列结构和记录 97
7.3仅复制表的列结构 98
7.3.1仅复制表的列结构 98
7.4复制其他表的记录 100
7.4.1复制其他表的记录 100
7.5选择某一列进行复制 101
7.6删除表、数据库和记录 102
7.7删除表 102
7.7.1当目标表存在时将其删除 104
7.8删除数据库 104
7.9删除所有记录 104
专栏 不使用MySQL监视器操作MySQL 106
专栏 多行输入 107
7.10总结 107
第3部分 熟练使用MySQL 111
第8章 使用各种条件进行提取 112
8.1设计列的显示内容并执行SELECT 112
8.1.1准备表tb 112
8.1.2改变列的显示顺序 113
8.1.3使用别名 114
8.2计算列值或处理字符串之后显示列 116
8.2.1使用列值进行计算并显示 116
8.2.2使用函数进行计算 118
8.2.3用于显示各种信息的函数 120
专栏 计算圆的面积 121
8.2.4连接字符串 121
8.2.5字符串操作中常用的函数 122
8.2.6日期和时间函数 124
8.3设置条件进行显示 125
8.3.1确定记录数并显示 125
8.3.2使用WHERE提取记录 127
8.3.3比较运算符 128
8.3.4使用字符串作为条件 130
8.3.5使用NULL作为条件 132
专栏删除多余的记录 133
8.4指定多个条件进行选择 134
8.4.1使用AND 134
8.4.2使用OR 135
8.4.3使用多个AND或OR 137
8.4.4使用CASE WHEN 138
8.5排序 141
8.5.1按升序排序并显示 141
8.5.2按降序排序并显示 143
8.5.3指定记录的显示范围 144
8.6分组显示 146
8.6.1分组显示 146
8.6.2计算各组的记录数 147
8.6.3显示各组的总和以及平均值 148
8.7设置条件分组显示 150
8.7.1按组处理 150
8.7.2提取记录后分组 152
8.7.3分组后排序 154
8.7.4分组方法总结 155
8.8总结 157
专栏 WHERE和HAVING 160
第9章 编辑数据 161
9.1更新记录 161
9.1.1瞬间更新列中所有的记录 161
专栏 防止意外执行UPDATE和DELETE 163
9.1.2只修改符合条件的记录 163
9.1.3将销售额最低的3条记录的备注修改为“加油!” 165
9.2复制符合条件的记录 167
9.2.1仅复制指定记录 167
9.2.2排序后复制 169
9.3删除符合条件的记录 170
9.3.1删除所有记录(复习) 170
9.3.2删除指定的记录 171
9.3.3排序后删除 172
9.4总结 173
专栏 数据库的运用方法 176
第10章 使用多个表 177
10.1显示多个表的记录 177
10.1.1确认本章示例中使用的多个表 177
10.1.2显示多条提取结果 178
10.1.3使用UNION合并3个以上的表 180
10.1.4按条件合并多条提取结果进行显示 181
10.1.5合并显示多条提取结果(允许重复) 183
10.2连接多个表并显示(内连接) 184
10.2.1使用其他表的记录进行处理 184
专栏 有“内连接”的话是不是也有“外连接”呢 187
10.2.2选择列进行显示 187
10.2.3给表添加别名 188
10.2.4使用USING使ON~的部分更容易阅读 190
10.2.5通过WHERE设置条件从连接表中提取记录 191
10.2.6提取多个表中的记录 192
10.3显示多个表的所有记录(外连接) 196
10.3.1什么是外连接 196
10.3.2外连接的种类 197
10.3.3使用左外连接 198
10.3.4使用右外连接 201
10.3.5避免混合使用左外连接和右外连接 203
专栏 加上OUTER后的书写方法 203
10.4自连接 203
10.4.1什么是自连接 203
10.4.2排序的技巧 其一 206
10.5从SELECT的记录中SELECT(子查询) 208
10.5.1什么是子查询 208
10.5.2显示最大值(返回值的子查询 其一) 209
专栏 GROUPBY函数 212
10.5.3提取大于等于平均值的记录(返回值的子查询 其二) 212
10.5.4使用IN(返回列的子查询) 213
专栏 子查询和内连接的提取结果的差异(虽然相似但不同!) 215
10.5.5使用“=”代替IN会报错吗 216
10.5.6使用EXISTS,仅以存在的记录为对象 218
10.5.7 NOT EXISTS 219
10.5.8排序的技巧 其二 221
10.6总结 224
第11章 熟练使用视图 227
11.1什么是视图 227
11.1.1视图的真面目 227
11.1.2视图的用途 227
专栏 视图和MySQL的版本 228
11.2使用视图 229
11.2.1创建视图 229
11.2.2通过视图更新列的值 230
11.3设置条件创建视图 232
11.3.1设置条件创建视图 232
11.3.2当更新基表时,视图会发生什么变化 234
11.3.3确认视图 236
11.4限制通过视图写入 238
11.4.1对视图执行INSERT操作会出现什么样的结果 238
11.4.2设置了条件的基表中会发生什么变化 240
11.4.3当与视图的条件不匹配时报错 242
11.5替换、修改和删除视图 243
11.5.1替换视图 243
11.5.2修改视图结构 244
11.5.3删除视图 245
专栏 什么是复制 245
11.6总结 248
第12章 熟练使用存储过程 250
12.1什么是存储过程 250
12.1.1可用的版本 250
12.1.2什么是存储过程 250
12.2使用存储过程 251
12.2.1创建存储过程 251
12.2.2执行存储过程 254
12.2.3创建只显示大于等于指定值的记录的存储过程 255
专栏在参数中加上IN的例子 257
12.3显示、删除存储过程 258
12.3.1显示存储过程的内容 258
12.3.2删除存储过程 258
12.4什么是存储函数 259
12.4.1可用版本 259
12.4.2什么是存储函数 259
12.5使用存储函数 260
12.5.1使用存储函数之前 260
12.5.2使用存储函数计算标准体重 261
12.5.3返回记录平均值的存储函数 264
12.5.4显示和删除存储函数 266
12.6什么是触发器 267
12.6.1什么是触发器 267
12.7创建触发器 268
12.7.1触发器被触发的时机 268
12.7.2创建触发器 269
12.7.3触发器的内容 272
12.8确认和删除触发器 273
12.8.1确认设置的触发器 273
12.8.2删除触发器 274
12.9总结 274
第13章 熟练使用事务 277
13.1什么是存储引擎 277
13.1.1什么是存储引擎 277
13.1.2存储引擎的种类 278
13.2设置存储引擎 278
13.2.1确认存储引擎 278
专栏 使用“\G”代替“;” 279
13.2.2修改存储引擎 280
13.3什么是事务 281
13.4使用事务 282
13.4.1执行前的注意事项 282
13.4.2开启事务 282
13.4.3确认表的内容 284
13.5自动提交功能 285
13.5.1关闭自动提交功能 286
13.5.2启动已关闭的自动提交功能 287
专栏 如何确认当前自动提交功能的模式? 288
13.5.3事务的使用范围 288
13.6总结 288
第14章 使用文件进行交互 291
14.1从文本文件中读取数据(导入) 291
14.1.1 CSV文件 291
14.1.2导入和导出的准备 292
14.1.3导入文件 293
专栏 导入GB 2312的文本文件 296
14.1.4将数据写入文本文件(导出) 296
14.1.5导出文件 297
14.2从文件中读取并执行SQL命令 298
14.2.1通过MySQL监视器执行编写在文件中的SQL语句 298
专栏 将常用表的内容保存到文件中 301
14.2.2通过命令提示符执行编写在文件中的SQL命令 302
专栏 在批处理文件中记录SQL命令 304
14.3将SQL的执行结果保存到文件中 304
14.3.1通过重定向将SQL语句的执行结果输出到文本文件中 304
专栏 使用重定向输入SQL语句,并通过重定向将结果输出到文件 307
14.3.2使用tee命令将SQL语句的执行结果保存到文件中 307
14.4备份和恢复数据库 309
14.4.1备份和恢复的方法 309
14.4.2使用mysqldump导出 310
专栏恢复作业失败的情况 312
14.4.3恢复转储文件 313
14.4.4字符编码问题 315
专栏 锁表 315
14.5总结 316
第4部分 MySQL+PHP的基础 319
第15章 用于控制MySQL的PHP 320
15.1要创建的示例 320
15.2在Web应用程序中使用MySQL 321
15.3使用Web时需要用到的机制 321
15.3.1 Web服务器和客户端 321
15.3.2 Web服务器的作用 322
15.3.3 Apache和 Web服务器 322
专栏 有状态协议 323
15.4静态页面和动态页面 323
15.5在Web上运行的程序 324
15.5.1 CGI 324
15.5.2脚本 324
15.6什么是PHP 325
15.6.1 PHP是什么 325
15.6.2本书使用的PHP 326
15.6.3设置php.ini 326
15.7首先显示“欢迎光临!” 327
15.7.1确认Apache是否启动 327
专栏 localhost的IP地址 328
15.7.2首先用PHP显示“欢迎光临!” 328
15.7.3没有正常显示时的解决对策 330
15.8使用PHP 332
15.8.1编写PHP脚本时需要遵循的规则 332
专栏 编写PHP脚本 333
15.8.2执行了什么处理 333
专栏 print和echo 335
15.8.3注释的写法 336
15.8.4 phpinfo函数 336
专栏 使用PHP关闭操作系统 337
15.9总结 338
第16章 PHP基础知识 340
16.1变量 340
16.1.1什么是PHP的变量 340
16.1.2变量名的规则 342
16.1.3预定义常量 342
16.1.4变量的数据类型 343
16.2字符串 344
16.2.1连接字符串 344
16.2.2 “?”和“?”的使用方法 344
16.2.3用??将变量括起来和用?将变量括起来的区别 345
16.3函数 347
16.3.1本书涉及的PHP函数 347
16.3.2通过date函数显示日期和时间 347
16.3.3环境信息 349
16.3.4通过gethostbyaddr函数获取主机名 351
16.4比较运算符 353
16.5循环处理 353
16.5.1通过for实现循环 353
16.5.2通过while实现循环 356
16.5.3通过do…while实现循环 357
16.6条件判断 358
16.6.1通过if进行条件判断 358
16.6.2三元运算符 359
16.6.3设置了多个条件的if的语法 360
专栏 存储过程中的条件分支 361
16.6.4使用了switch的条件判断 362
16.7数组 365
16.7.1什么是数组 365
16.7.2给数组赋值的方法 366
专栏 下标的数值设定要恰当 367
16.7.3关联数组 368
专栏 关联数组的下标即使不使用??或?括起来也能正常工作吗 368
16.8总结 369
专栏PHP的文档 369
第17章 PHP脚本和HTML 372
17.1HTML源代码 372
17.2制作Web页面的两种方法 373
17.2.1制作静态Web页面 373
17.2.2制作动态Web页面 373
17.2.3浏览器不区分静态页面和动态页面 374
17.3HTML的规则 374
17.4使用PHP脚本输出HTML文件 377
17.5需要记住的标签 379
17.6使用CSS指定颜色和字体大小 382
17.6.1指定背景的颜色 382
17.6.2指定字符的大小和颜色 384
17.7 Here Document和nl2br函数 385
17.7.1什么是Here Document 385
17.7.2什么是nl2br函数 386
专栏〈textarea〉标签 388
17.8使用PHP从浏览器发送和接收数据 388
17.8.1浏览器和PHP文件之间的数据交换 388
17.8.2制作一个用于发送数据的Web页面send.html 389
17.8.3创建receive.php以接收和显示数据 394
专栏 超级全局变量 395
17.8.4发送和接收数据 395
17.9通过POST和GET发送数据 396
17.9.1发送和接收数据 396
17.9.2使用GET方法发送数据 396
17.9.3 GET和POST的区别 397
17.9.4试着用GET方法将值添加在URL上发送 398
17.9.5在不进行任何声明的情况下发送数据 399
专栏Google是否也可以把数据添加在URL上 400
17.10总结 401
第18章 使用PHP脚本操作MySQL 404
18.1使用PHP脚本连接到MySQL服务器 404
18.1.1从PHP连接到数据库的方法 404
专栏mysql函数 405
18.1.2什么是PDO?什么是类?什么是方法? 405
18.1.3使用PDO连接到MySQL服务器 405
18.2使用PDO执行SQL语句 407
18.2.1向表中插入记录 408
18.2.2在PHP中接收SQL语句的执行结果 410
18.3异常处理中的错误处理 413
18.3.1 SQL的错误处理 414
专栏 显示数据库中存在的表 416
18.4总结 417
第5部分 MySQL+PHP实践 419
第19章 使用PHP和MySQL制作一个简易公告板 420
19.1制作一个简易公告板 420
19.1.1简易公告板的结构 420
19.1.2创建数据库和表 421
19.1.3简易公告板的文件结构 422
19.2创建首页 423
19.2.1调用消息显示脚本的表单 423
19.2.2调用插入脚本的表单 423
19.2.3调用删除脚本的表单 424
19.2.4调用查询脚本的表单 425
19.2.5创建首页 426
19.3创建分别具有显示、插入、删除和查询功能的PHP脚本 427
19.3.1 4个脚本的共通之处 427
19.3.2用于显示记录的PHP脚本 427
19.3.3用于插入记录的PHP脚本 428
19.3.4用于删除记录的PHP脚本 431
19.3.5用于查询记录的PHP脚本 432
19.3.6确认4个文件的运行结果 433
专栏在公告板上输入标签的技巧 434
19.4总结 435
第20章 发布到互联网上时需要注意的地方 438
20.1不在发布的文件夹中放置重要信息 438
20.1.1 PHP文件的结构 438
20.1.2如何读取其他文件的脚本 439
专栏 读取外部文件的命令 440
20.2避免在查询中输入非法数据 441
20.2.1什么是SQL注入 441
20.3正则表达式 443
20.3.1什么是正则表达式 443
20.3.2正则表达式的示例 443
20.3.3 preg_match函数 444
20.3.4使用正则表达式检查非法输入 445
20.4不执行非预期标签 446
20.4.1发送恶意标签 446
20.4.2漏洞攻击 447
20.4.3移除输入的标签 448
专栏如何创建安全的脚本 450
20.5总结 450
第21章 创建一个实用公告板 453
21.1创建一个实用公告板 453
21.1.1准备实用公告板中使用的图片 456
21.2创建实用公告板中使用的表 456
21.2.1 tbj0主题表 456
21.2.2 tbj1(消息表) 457
21.3制作首页(创建主题以及显示列表) 458
21.3.1 bulletin_top.php的代码清单 458
21.3.2 bulletin_top.php的结构 462
21.4制作各个主题的页面(输入回帖和显示列表) 464
21.4.1 bulletin.php的代码清单 465
21.4.2 bulletin.php的结构 469
21.5制作消息的查询页面 473
21.5.1 bulletin_search.php的代码清单 474
21.5.2 bulletin_earch.php的结构 476
21.6制作读取数据库信息的原始文件 478
21.7制作数据重置页面 479
21.7.1 bulletin_reset.php的代码清单 479
21.7.2 bulletin_reset.php的结构 479
21.8总结 480
第6部分 附录 483
附录1 使用phpMyAdmin 484
附录2 常见问题的检查清单 489
附录3 MySQL基础练习 493