1. 设计web数据库
    1. 关系数据库的概念和术语
      1. 关系数据库由关系组成
        1. 列
        2. 行
        3. 值
        4. 键
          1. 主键
          2. 外键
      2. 模式
      3. 关系
        1. 一对一
        2. 一对多
        3. 多对多
    2. web数据库的设计
      1. 考虑要建模的实际对象
      2. 避免保存沉余数据
        1. 避免空间浪费
        2. 导致数据更新不一致
        3. 避免3种更新不规则情况
          1. 修改不规则
          2. 插入不规则
          3. 删除不规则
        4. 其他
          1. 使用原子列值
          2. 选择有意义的键
          3. 希望数据库回答什么问题
          4. 避免多个空属性的设计
        5. 表格类型的总结
          1. 描述现实世界对象的简单表
          2. 描述两个现实世界对象的多对多关系的关联表
    3. web数据库的架构
  2. 创建web数据库
    1. 创建一个数据库
    2. 设置用户权限
    3. 权限系统的介绍
      1. 最少权限原则
      2. 权限命令
        1. grant授予mysql用户权限
        2. revoke取消mysql用户权限
      3. 权限级别
        1. 权限类型和级别
          1. 一般用户的权限
          2. select
          3. insert应用表列
          4. update应用表列
          5. delete应用表
          6. index应用表
          7. alter应用表
          8. create应用数据库和表
          9. drop应用数据库和表
          10. 管理员的权限
          11. file
          12. 其他命令,自己百度
          13. 几个特定的权限
          14. all
          15. usage
    4. 创建数据库表
      1. 理解其他关键字意思
        1. NOT NULL
        2. auto_increment
        3. primary key
        4. unsigned
      2. 理解列的类型
        1. int
        2. float
        3. char
        4. varchar
        5. date
    5. 创建索引
      1. create ...index...语句创建索引
    6. 理解mysql的标识符
      1. datebase
      2. table
      3. column
      4. index
      5. alias
    7. 选择mysql中的列类型
      1. 数字
        1. 整数型int
          1. tinyint[(M)]范围-127..128或0-255
          2. smallint[(m)]范围-32768...32767或0-65535
          3. mediumint[(m)]范围-8388608...8388607或0-16777215
          4. int[(M)]范围0-2的32次方-1
          5. bigint[(M)]范围0-2的64次方-1
        2. 浮点型float
          1. float(精度)
          2. float[(M,D)]
      2. 日期时间
        1. date
        2. time
        3. datetime
        4. timestamp
        5. year
      3. 字符串
        1. 普通字符串
          1. char
          2. varchar
        2. text和blob类型
          1. text
          2. tinyblob
          3. tinytext
          4. blob或text
          5. mediumblob或mediumtext
          6. longblob或longtext
          7. blob
        3. 两种特殊类型
          1. set
          2. enum枚举
    8. 使用mysql命令
      1. 概述
      2. 登录mysql -h 主机名 -u 用户名 -p
      3. 创建用户:grant命令
      4. 收回权限:revoke命令
      5. 选择数据库表use
      6. 用show和describe来查看数据库
        1. 查看数据库
        2. 查看表
  3. 使用MySQL数据库
    1. SQL是什么
      1. 数据定义语言DDL
      2. 数据操作语言DML
    2. 在数据库中插入数据
      1. insert into 表名 [(可选列)] values (值1,值2...)
        1. low_priority
        2. delayed
        3. ignore
    3. 在数据库中取出数据
      1. select 字段 from 表名 条件等
      2. 获取特定条件的数据WHERE
        1. 等于=
        2. 大于>
        3. 小于<
        4. 大于等于>=
        5. 不等于!=
        6. IS NOT NULL
        7. IS NULL
        8. BETWEET
        9. IN
        10. NOT IN
        11. LIKE
          1. %百分号
          2. _下划线
        12. NOT LIKE
        13. REGEXP
        14. AND
        15. OR
      3. 从多个表中获取数据-关联表
        1. 两个表关联
        2. 多个表关联
        3. 查找不匹配行(左关联)
        4. 使用表的别名aliases
        5. 关联的总结
          1. 笛卡尔乘积(完全关联)
          2. 交叉关联
          3. 内部关联
          4. 等价关联
          5. 左关联from Aleft joinB on...
      4. 以特定顺序获取数据
      5. 分组与合计数据
        1. avg(字段名)
        2. count(项目)
          1. 如果指定一行
          2. 如果在列前加distinct
          3. 如果指定count(*)
        3. min(列)
        4. max(列)
        5. std(列)
        6. stddev(列)
        7. sun(列)
        8. 使用上面方法搭配group by 字段名
        9. having avg(字段名) > 50
      6. 选择要返回的行limit 2,3
    4. 表的连接
    5. 使用子查询
      1. 基本的子查询
      2. 子查询和操作符
        1. 操作符
          1. any
          2. in
          3. some
          4. all
          5. exists
      3. 关联子查询
      4. 行子查询
      5. 使用子查询作为临时表
    6. 更新数据库中的行记录值
    7. 创建后修改表结构
      1. add
      2. add index
      3. add ... primary key
      4. alter {default 值/或drop default}
      5. change
      6. modify
      7. drop
      8. drop primary key
      9. drop index
      10. 还有好多参见page198页
    8. 删除数据库中的行记录
    9. 删除表
    10. 删数据库
  4. 用PHP从网页访问MYSQL
    1. web数据库架构的工作原理
    2. 通过web查询数据库的基本步骤
      1. 先检查并过滤来自用户的数据
        1. trim()
        2. addslashes()
        3. get_magic_quotes_gpc()
        4. stripslashes()
        5. htmlspecialchars(带html标签的字符)
      2. 然后建立一个数据库连接
      3. 开始执行查询数据库语句select
      4. 获取查询结果
      5. 将结果显示给用户
    3. 建立数据库连接
      1. 面向对象方法
      2. 面向过程方法
      3. mysql同时连接数据库数量限制
        1. mysql的max_connections参数
        2. apache的maxclients参数
      4. 选择使用数据库
        1. mysql命令选择
        2. 面向对象选择
        3. 面向过程选择
    4. 从数据库取回数据
      1. 选择要使用的数据库
        1. 面向过程选择
        2. 面向对象选择
        3. mysql命令选择
      2. 查询数据库
        1. 面向对象查询
        2. 面向过程查询
      3. 检索查询结果
        1. 面向对象检索
          1. 检索有几个结果
          2. 返回结果以行显示的关联数组内容
          3. 返回结果以行显示的列举数字数组内容$row[0][1]....
        2. 面向过程检索
          1. 检索有几个结果
          2. 返回结果以行显示的关联数组内容
          3. 返回结果以行显示的列举数字数组内容$row[0]...
          4. 将一行结果取回到一个对象中,比较像mysqli_fetch_row
      4. 与数据库断开连接
        1. 面向对象
          1. 释放结果集free()
          2. 关闭数据库连接close()
        2. 面向过程
          1. 释放结果集free()
          2. 关闭数据库连接close()
    5. 在数据库中插入新信息
      1. 先mysqli对象连接数据库
      2. 然后$db->query(插入语句)
      3. 查询与更改插入删除的个别不同
        1. insert,update,delect更改影响的结果行
          1. 面向对象
          2. 影响的结果行数
          3. 面向过程
          4. 影响的结果行数
        2. 查询select的结果行
          1. 面向对象
          2. 影响的结果行数
          3. 面向过程
          4. 影响的结果行数
    6. 使用prepared语句
      1. 面向对象
        1. 先定义查询语句$query
        2. 再用$db->prepare($query)定义查询模版
        3. $stmt->bind_param(类型,参数1,参数2....)
        4. $stmt->execute()运行查询返回一个结果集合
        5. $stmt->affected_rows
        6. 绑定结果$stmt->bind_result()
          1. $stmt->fetch()
      2. 面向过程
    7. 使用php与数据库交互的其他接口
    8. 使用常规的数据接口PEAR MDB2
      1. 连接参数方法名都不一样
      2. 连接数据库
  5. MySQL高级管理
    1. 深入理解权限系统
      1. 保存权限信息的6个表
        1. user
        2. host
        3. db
        4. tables_priv
        5. columns_priv
        6. procs_priv
        7. 这些表包含两个字段
          1. 范围字段
          2. 权限字段
      2. 访问控制:如何使用grant表
        1. 连接验证
        2. 请求验证
      3. 更新权限:修改什么时候生效
        1. flush privileges
        2. mysqladmin flush-privileges
        3. mysqladmin reload
    2. 提高数据库的安全性
      1. 从操作系统角度来保护mysql
      2. 密码
      3. 用户权限
      4. web问题
    3. 获取关于数据库的更多信息
      1. 使用show获取信息
        1. show tables
        2. show databases
        3. show tables from books
        4. show columns from books.orders
        5. show grants for 用户名
        6. 更多语法查看page224
      2. 使用describe获取关于列的信息
      3. explain理解查询操作的工作过程
    4. 使用索引提高查询速度
    5. 优化数据库
      1. 权限最少原则
      2. 表的优化optimize table 表名
        1. optimize table 表名
        2. myisamchk -r table
      3. 使用索引
      4. 使用默认值
    6. 备份和恢复
      1. 备份数据库
        1. lock tables table lock_type
        2. mysql_dump命令备份
        3. mysqlhotcopy脚本
      2. 恢复数据库
        1. 坏了一个表可以修复
        2. 具体可以自己百度,书中介绍马虎
    7. 实现复制
  6. MySQL高级编程
    1. load data infile语句
    2. 储存引擎
      1. MyISAM默认类型
      2. InnoDB类型
      3. MEMORY类型
      4. MERGE类型
      5. ARCHIVE类型
      6. CSV类型
    3. 事务
      1. 理解事务的定义
        1. ACID原则
          1. 原子性
          2. 一致性
          3. 孤立性
          4. 持续性
      2. 通过innodb使用事务
        1. set autocommit=0
        2. start transaction
        3. commit
        4. rollback
    4. 外键
      1. references 表名(字段名)
      2. 用alter table 表名 add foreign key(id) references 表名(id)
    5. 储存过程
      1. 基本示例
        1. 先delimiter//转换分隔符
        2. 再创建过程名(出入 参数 类型)
          1. 创建的是过程的话
          2. 创建函数function的话
        3. 开始在begin和end之间写sql语句
        4. 以//结束不要忘了结束
        5. 重新delimiter ; 定义分隔符为分号
      2. 局部变量
      3. 游标和控制结构